git cơ bản

Tham khảo bài viết trước tại đây: https://chiase4dev.com/git/thao-tac-co-ban-voi-git-phan-1.html

1. Giới thiệu về Git

Tham khảo chi tiết tại bài viết sau: Sử Dụng Lệnh Git/Git Hub Cơ Bản Trong 5 Phút

lệnh git

2. Các thuật ngữ Git quan trọng (tiếp)

Git diff

Git diff là một công cụ vô cùng hữu ích trong Git, cho phép bạn so sánh các phiên bản khác nhau của một tập tin hoặc thậm chí giữa các nhánh. Nó giúp bạn :

  • Hiểu rõ những thay đổi: Xem chính xác những dòng nào đã được thêm, xóa hoặc sửa đổi giữa hai phiên bản.
  • Kiểm tra trước khi commit: Đảm bảo rằng những thay đổi bạn sắp commit là chính xác và mong muốn.
  • So sánh các nhánh: Xem những khác biệt giữa các nhánh để quyết định nên merge hay rebase.
  • Giải quyết xung đột: Khi xảy ra xung đột, git diff giúp bạn nhanh chóng xác định và giải quyết chúng.
Git diff

Cách sử dụng “git diff” cơ bản:

– So sánh file làm việc với commit cuối:

git diff

– So sánh file trong staging area với commit cuối:

git diff --staged

– So sánh hai commit:

git diff <commit_id_1> <commit_id_2>

– So sánh hai nhánh:

git diff <branch_name_1> <branch_name_2>

Ví dụ:

Giả sử bạn muốn xem những thay đổi đã được thực hiện trong file README.md từ commit trước đó đến commit hiện tại, bạn có thể sử dụng lệnh:

git diff HEAD~1 README.md

Các tùy chọn hữu ích khác:

  • –stat: Hiển thị thống kê về số lượng dòng được thêm, xóa và sửa đổi.
  • -U <number>: Hiển thị số dòng context xung quanh các phần thay đổi (mặc định là 3).
  • –word-diff: Hiển thị các từ thay đổi một cách trực quan.
Git diff 2

Git reset

Git reset là một lệnh trong Git được sử dụng để quay trở lại một trạng thái commit cụ thể trong quá khứ. Nói cách khác, nó cho phép bạn “quay ngược thời gian” trong lịch sử phát triển của dự án của mình.

Hiểu về git reset

Khi bạn thực hiện lệnh git reset, bạn đang thực sự di chuyển con trỏ HEAD (con trỏ tham chiếu đến commit hiện tại) đến một commit khác trong quá khứ. Điều này có nghĩa là tất cả các commit nằm giữa commit hiện tại và commit đích sẽ bị loại bỏ khỏi lịch sử.

Các tuỳ chọn của git reset:

  • –soft: Chỉ di chuyển HEAD, các thay đổi vẫn còn trong staging area. Điều này hữu ích khi bạn muốn hủy một commit gần đây nhưng vẫn giữ lại các thay đổi.
  • –mixed: (mặc định) Di chuyển HEAD và xóa bỏ các thay đổi khỏi staging area. Các thay đổi vẫn còn trong working directory.
  • –hard: Di chuyển HEAD, xóa bỏ các thay đổi khỏi staging area và working directory. Đây là tùy chọn nguy hiểm nhất vì nó sẽ xóa bỏ hoàn toàn các thay đổi chưa được commit.

Các cách sử dụng phổ biến:

– Quay lại một commit trước đó:

git reset --hard HEAD~3

Lệnh trên sẽ di chuyển HEAD trở lại 3 commit trước đó và xóa bỏ tất cả các thay đổi kể từ đó.

Git reset exmple 2

– Quay lại một commit cụ thể:

git reset --hard <hash_commit>

Thay thế <hash_commit> bằng hash của commit bạn muốn quay lại.

– Huỷ bỏ các thay đổi trong staging area:

git reset HEAD

Lệnh này sẽ hủy bỏ tất cả các thay đổi đã được thêm vào staging area.

Lưu ý quan trọng:

  • Luôn tạo bản sao dự phòng trước khi sử dụng git reset –hard.
  • Hiểu rõ về các tùy chọn của git reset để tránh mất dữ liệu không mong muốn.
  • Nếu bạn không chắc chắn về cách sử dụng git reset, hãy tìm kiếm sự trợ giúp từ cộng đồng hoặc tài liệu chính thức của Git.

Ví dụ minh họa:

Git reset example

Giả sử bạn có lịch sử commit như sau:

A <- B <- C <- D (HEAD)

Bạn muốn quay lại commit B và loại bỏ commit C và D. Bạn có thể sử dụng lệnh:

git reset --hard B

Sau khi thực hiện lệnh này, lịch sử commit của bạn sẽ trở thành:

A <- B (HEAD)

Khi nào nên sử dụng git reset?

  • Sửa lỗi: Khi bạn phát hiện ra một lỗi nghiêm trọng trong một commit gần đây, bạn có thể sử dụng git reset để quay trở lại một commit trước đó, sửa lỗi và commit lại.
  • Thử nghiệm: Nếu bạn muốn thử nghiệm một tính năng mới nhưng không muốn nó ảnh hưởng đến lịch sử chính của dự án, bạn có thể tạo một nhánh mới, thực hiện các thay đổi và sau đó sử dụng git reset để loại bỏ các thay đổi đó nếu cần.
  • Đơn giản hóa lịch sử: Khi lịch sử commit của bạn trở nên quá phức tạp, bạn có thể sử dụng git reset để hợp nhất một số commit lại với nhau.
Git reset before and after

Git revert

Git revert: Hoàn tác commit mà không làm mất lịch sử

Git revert là một lệnh trong Git được sử dụng để hoàn tác một hoặc nhiều commit trong lịch sử của dự án. Khác với git reset, git revert sẽ tạo ra một commit mới để đảo ngược các thay đổi của commit mà bạn muốn hoàn tác. Điều này có nghĩa là lịch sử commit của bạn sẽ được bảo toàn đầy đủ, giúp bạn dễ dàng theo dõi quá trình phát triển của dự án.

Git revert avatar

Cách sử dụng git revert

git revert <commit-hash>

<commit-hash>: Là mã băm của commit mà bạn muốn hoàn tác. Bạn có thể tìm thấy mã băm này bằng cách sử dụng lệnh git log

Ví dụ

Giả sử bạn có lịch sử commit như sau:

A <- B <- C <- D (HEAD)

Bạn muốn hoàn tác commit C. Bạn sẽ thực hiện lệnh:

git revert C

Sau khi thực hiện lệnh này, lịch sử commit của bạn sẽ trở thành:

A <- B <- C' <- D (HEAD)

Trong đó:

  • C' là một commit mới được tạo ra để hoàn tác các thay đổi của commit C.
  • Các commit trước đó (A và B) vẫn được giữ nguyên.
Git revert

Khi nào nên sử dụng git revert?

  • Hoàn tác một commit sai: Khi bạn phát hiện ra một commit gây ra lỗi hoặc thay đổi không mong muốn, git revert giúp bạn khôi phục lại trạng thái trước đó mà không làm mất đi thông tin về commit sai đó.
  • Tạo một điểm đánh dấu: Bạn có thể sử dụng git revert để tạo một điểm đánh dấu trong lịch sử commit, cho phép bạn dễ dàng quay trở lại trạng thái đó sau này nếu cần.

Phân biệt git reset và git revert

Git reset

  • Hoạt động: Di chuyển con trỏ HEAD (con trỏ tham chiếu đến commit hiện tại) đến một commit khác, xóa bỏ các commit ở giữa.
  • Sử dụng:
    • Khi bạn muốn loại bỏ hoàn toàn một commit hoặc một loạt các commit khỏi lịch sử.
    • Khi bạn muốn quay lại một phiên bản cũ của dự án và không cần giữ lại lịch sử các thay đổi đã xóa.
  • Ưu điểm: Đơn giản, nhanh chóng.
  • Nhược điểm: Mất thông tin về các commit bị xóa.

Git revert

  • Hoạt động: Tạo một commit mới để hoàn tác commit đã chọn.
  • Sử dụng:
    • Khi bạn muốn hoàn tác một commit cụ thể mà vẫn giữ lại lịch sử.
    • Khi bạn muốn tạo một bản ghi rõ ràng về việc sửa lỗi hoặc thay đổi.
  • Ưu điểm: Bảo toàn lịch sử commit.
  • Nhược điểm: Tạo thêm commit mới.
git-reset-vs-revert-1

Bảng so sánh

Tính năngGit resetGit merge
Mục đíchXoá bỏ commitHoàn tác commit
Tác động đến lịch sửThay đổi lịch sửBảo toàn lịch sử
Tạo commit mớiKhông
Sử dụng khiMuốn loại bỏ hoàn toàn commitMuốn giữ lại lịch sử
Độ nguy hiểmCao, đặc biệt khi sử dụng với --hardThấp hơn, chỉ tạo thêm một commit mới
git-reset-vs-revert-2

Kết luận

Lựa chọn giữa git resetgit revert phụ thuộc vào mục tiêu cụ thể của bạn. Nếu bạn muốn loại bỏ hoàn toàn một phần lịch sử, hãy sử dụng git reset. Nếu bạn muốn hoàn tác một commit mà vẫn giữ lại lịch sử, hãy sử dụng git revert.

Tài liệu tham khảo

https://viblo.asia/p/phan-biet-mot-so-cau-lenh-co-ban-trong-git-4P856JX95Y3

https://www.pixelstech.net/article/1549115148-git-reset-vs-git-revert

Leave a Reply

Your email address will not be published. Required fields are marked *