Các lệnh Git cơ bản (phần 2)

3.7/5 - (6 bình chọn)

Nếu bạn đã đọc Các lệnh Git cơ bản phần 1, Code Tốt xin giới thiệu các lệnh Git phổ biến giúp bạn nắm được cách sử dụng Git.

Tải code mới nhất về từ branch master

Đầu tiên, bạn cần kiểm tra xem có update mới nhất từ bất kì branch nào hay không:

git fetch origin

Kết quả trả về thường như sau:

ad8d852..896ae21 kevin-dev -> origin/kevin-dev
+ e5a459d...ef560a6 master -> origin/master (forced update)

Như bạn thấy, vậy là có 2 branch có update mới. Nhiệm vụ của chúng ta là chuyển hẳn về branch master (vì đây thường là branch sẽ có chứa các code merge từ các branch khác). Ta sử dụng lần lượt các dòng lệnh sau:

  1. Bắt đầu bằng việc reset lại code trên branch hiện tại. Lưu ý bạn cần commit code lên trước khi reset nếu muốn lưu lại nhé.
    git reset --hard
  2. Tiếp theo, ta chuyển qua branch master:
    git checkout master
  3. Sau đó, ta chạy lệnh git fetch origin nếu bạn chưa chạy ở trên. Nếu đã chạy lệnh trên rồi, bạn chạy tiếp lệnh git reset --hard origin/master để update code mới nhất từ master về.
  4. Giờ, bạn cần kiểm tra lại bằng lệnh git log để xem các commit mới nhất có khớp không.

Thông thường nếu bạn làm theo như trên thì xác suất code lệch (tức là conflict) thường rất thấp.

Push code từ branch master local lên branch khác trên remote

Thông thường nếu bạn quên tạo branch mới sau khi checkout master, bạn sẽ gặp 1 tình huống là code commit trên master, nhưng mà bạn cần push code lên 1 branch riêng trên remote.

Ta có thể xử lý bằng 2 cách:

Cách 1: Push code trực tiếp từ branch master (local) lên branch khác trên remote

Cách này thiên về hot-fix, tức là đôi khi bạn chỉ có 1 commit cần push thôi. Các bước làm như sau:

  1. Bạn kiểm tra git status thấy báo master có 1 commit cần push lên.
  2. Chạy dòng lệnh: git push -u origin master:<tên branch khác> để đẩy code lên
  3. Chạy tiếp dòng lệnh git branch --set-upstream-to=origin/master để reset remote nhận lại master.
  4. (Nên làm) Bạn chạy lệnh git reset HEAD^1 để gỡ bỏ commit đó khỏi branch master trên local và git reset --hard. Mục đích là để không xung đột code nếu bạn cần update code master từ remote.

Cách 2: Tạo branch mới và push code lên bình thường

Cách này thì cũng tiện hơn nếu bạn có nhiều commit và cần tạo 1 branch riêng để đẩy code lên.

  1. Bạn kiểm tra git status thấy báo master có 1 commit cần push lên.
  2. Bạn tạo 1 branch mới và checkout luôn branch này: git checkout -b new-branch
  3. Bây giờ, bạn push code lên remote bằng branch này git push -u origin new-branch
  4. (Nên làm) Bạn checkout lại branch master và chạy git reset HEAD^1 để gỡ commit khỏi master, bởi vì nếu bạn muốn lấy code mới nhất từ master thì có thể bị xung đột (do branch master có thể không có commit của bạn).

Lấy 1 commit từ các branch khác

Tình huống này khá thú vị: chẳng hạn như bạn đang trên 1 branch chạy fix header trong khi 1 bạn khác đang chạy hotfix global typography. Tình huống đặt ra là bạn kia sửa phần typography của cả header nữa, trong khi bạn cần làm đồng thời.

Như vậy, ngay sau khi bạn kia commit code lên, bạn cần sử dụng code của bạn ấy để xem có bị xung đột gì với code bạn đang làm hay không.

Với các case như này, việc sử dụng cherry-pick được coi là 1 giải pháp hiệu quả.

Cách thức thực hiện có thể như sau:

  1. Đầu tiên bạn chạy git fetch orign để xem branch của bạn kia có update gì mới không.
  2. Tiếp đến, nếu thấy update mới, bạn tìm commit ID và gõ git cherry-pick commit-id để lấy commit đó vào branch hiện tại của bạn.

Lưu ý nếu cả 2 cùng sửa 1 file, có thể sẽ có conflict. Bạn chỉ cần so sánh và cố gắng giữ cả code của bạn lẫn của bạn dev kia là được.

Bạn còn lệnh Git nào chưa nắm hay tình huống nào cần được tư vấn cách xử lý? Hãy share cho Code Tốt biết qua mục Comment nhé.

Viết một bình luận


Chuyên gia về Web
Bạn muốn làm việc với dịch vụ website do chúng tôi triển khai?
Gọi tư vấn 0982.90.4343
Chuyên gia về Web
Bài viết liên quan

07/04/2024

PHP: Format date dd/mm/yyyy và so sánh với Date hiện tại
Một vấn đề hay gặp trong quá trình xử lý PHP datetime là tình huống format date từ định dạng...

02/01/2024

Fix lỗi npm không thể cài các package devDependencies
Khi cài đặt dự án,  có lúc bạn sẽ cài mãi cũng không đủ các package npm, đặc biệt là...
Gọi file PHP trong WordPress

19/09/2023

Cài đặt và sử dụng WP-CLI trên môi trường Linux
Trên một số môi trường Hosting có thể cung cấp SSH hoặc Terminal access, song không có sẵn WP-CLI để...
Import database MySQL lớn trên môi trường Docker

06/08/2023

Import database MySQL lớn trên môi trường Docker
Mình sử dụng EasyPanel để quản lý các Docker và build môi trường app. Nay gặp tình huống phải import...