Series Git Nâng Cao - phần I: git checkout

Series Git Nâng Cao - phần I: git checkout

Sau đây mình xin giới thiệu với các bạn những câu lệnh git sẽ giúp bạn xử lý một số tình huống nâng cao thường gặp trong công việc.

git checkout

git checkout là hành động chuyển đổi giữa các phiên bản khác nhau của một đối tượng. Đối tượng ở đây có thể là những tệp (files), những commit, hoặc những nhánh (branches).

Cách sử dụng là thêm tên của branch sau câu lệnh git checkout, ví dụ, thư mục làm việc của bạn đang ở nhánh master, giả sử đã có sẵn nhánh a-new-feature

git checkout a-new-feature

Câu lệnh trên có ý nghĩa là điều hướng giữa các nhánh được tạo bởi git branch, và cập nhật các file trong thư mục hiện tại ở nhánh master giống với phiên bản trong nhánh a-new-feature.
Đối với trường hợp, bạn vừa muốn tạo một nhánh mới đồng thời "checkout" sang nhánh đó luôn thì dùng thêm đối số -b thì git sẽ mặc định tạo ra một nhánh từ nhánh hiện tại, và chuyển tới nhánh đó.

git checkout -b <new-branch>

Ví dụ:
new-branch
Thêm tên nhánh vào phía sau sẽ chỉ định một nhánh bất kỳ để check out không phải nhánh hiện tại

git checkout -b <new-branch><existing-branch>

"Checkout" một nhánh từ xa (a remote branch) thì làm thế nào?
Đầu tiên là "fetch" hết các nhánh từ xa

git fetch --all

Sau đó thì "checkout" bình thường thôi

git checkout <remote-branch>

hoặc

git checkout <remote-branch> origin/<remote-branch>

Detached HEADS

Qua các cách ở trên ta đã biết được các cách chuyển đổi nhánh thông qua tên branch. Ngoài ra ta cũng có thể chuyển đổi về các phiên bản cũ thông qua mã Hash của commit. Trạng thái này được gọi là "Detached HEAD".

git checkout a05ef02
//checking out 'a05ef02'.

detached

  • Lưu ý: thông thường khi ta tạo một commit mới trên branch, Git sẽ tự động di chuyển con trỏ HEAD đến commit mới nhất mà bạn vừa tạo. Nhưng đối với Detached HEAD sẽ không như vậy, những commit mới sẽ không thuộc bất kì một nhánh nào và chúng ta dễ dàng mất những thay đổi mới (trừ khi chúng ta nhớ được mã Hash của commit đó). Có một cách đơn giản hơn đó là sử dụng Git stash.
  • Cách lấy mã Hash của commit:
git reflog

hoặc

git log --oneline

Ta có thể xem được mã Hash cũng như trạng thái của commit.
git-log

Tài liệu tham khảo:

Trên đây mình đã giới thiệu cho các bạn một số câu lệnh cơ bản về git checkout, ở bài tiếp trong series git nâng cao mình sẽ giới thiệu cho các bạn về Git stash.