Quay lại

Squash Commit Và Ghi Đè Commit Trong Git Chuyên mục Devops    2023-12-26    46 Lượt xem    32 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Trong Git, "squash commit" là một phương pháp để kết hợp nhiều commit liên quan thành một commit duy nhất. Điều này giúp giữ cho lịch sử commit trở nên sạch sẽ và dễ theo dõi hơn, đặc biệt là khi bạn làm việc trên nhánh tính năng hoặc nhánh phát triển.

Dưới đây là một số bước cơ bản để squash commit trong Git:

  1. Chuyển đến nhánh cần squash commit:

    git checkout branch_name​
  2. Sử dụng lệnh rebase với tùy chọn interactive (-i):

    git rebase -i HEAD~n​

    Trong đó, n là số commit bạn muốn squash. Nếu bạn muốn squash tất cả commit từ đầu đến HEAD, bạn có thể sử dụng git rebase -i --root.

  3. Sửa đổi file tương tác: Khi bạn chạy lệnh rebase, Git sẽ mở một cửa sổ tương tác hoặc mở một file với danh sách commit và các hướng dẫn. Đối với mỗi commit, bạn có thể chọn hành động bạn muốn thực hiện. Để squash commit, bạn đổi từ "pick" thành "squash" hoặc "s".

    Ví dụ:

    pick abc123 Commit message 1
    squash def456 Commit message 2
    squash xyz789 Commit message 3​
  4. Lưu và đóng file tương tác: Sau khi bạn sửa đổi file, lưu và đóng nó.

  5. Chỉnh sửa commit message: Git sẽ mở một file khác để chỉnh sửa commit message của commit kết hợp. Bạn có thể giữ lại một commit message hoặc kết hợp tất cả thành một commit message mới.

  6. Lưu và đóng file chỉnh sửa commit message: Lưu và đóng file để hoàn tất quá trình squash commit.

  7. Hoàn thành rebase:

    git rebase --continue​

    Hoặc, nếu có xung đột, bạn sẽ cần giải quyết xung đột và sau đó tiếp tục rebase bằng cách sử dụng:

    git rebase --continue​
  8. Đẩy nhánh đã squash lên repository (nếu cần):

    git push origin branch_name --force​

    Lưu ý: Sử dụng --force chỉ khi bạn chắc chắn rằng không ai khác đang làm việc trên nhánh đó.

Lưu ý rằng việc sử dụng --force có thể thay đổi lịch sử của nhánh và có thể gây ra vấn đề cho người khác nếu họ đã pull nhánh của bạn. Hãy chắc chắn rằng bạn hiểu rõ các tác động trước khi sử dụng lệnh này.

Full Steps: 

git log --oneline  //xem có bao nhieu commit

B1:
git rebase -i HEAD~3  //gộp bao nhiêu commit thì thay số 3

pick 682c63e fix bug login
pick b45bfd8 fix bug login 2
pick 068c3d6 fix bug login 3 

B2:
// Ấn i để sửa lại nhánh đàu thay pick thành s
// Sau đó ấn ctrl  để thoát và ấn :wq

vd:
pick 682c63e fix bug login
s b45bfd8 fix bug login 2
s 068c3d6 fix bug login 3 

B3:
// Ấn i để sửa và thêm dấu # vào commit k dùng

fix bug login

# This is the commit message #2:

fix bug login 2

# This is the commit message #3:

fix bug login 3

// Sau đó ấn ctrl  để thoát và ấn :wq
vd: 
fix bug login

# This is the commit message #2: k bỏ # ở đây

 fix bug login 2

# This is the commit message #3: k bỏ # ở đây

# fix bug login 3

B4:
git push -f origin branch name

Ghi đè commit

git commit --amend --no-edit  //cái này để ghi đè commit

Lệnh git commit --amend --no-edit được sử dụng để thay đổi commit cuối cùng của bạn bằng cách thêm thêm thay đổi mới hoặc chỉnh sửa thông điệp commit mà không tạo commit mới. Điều này thường hữu ích khi bạn đã thực hiện một commit nhưng sau đó nhận ra có một số thay đổi mà bạn muốn kết hợp vào commit trước đó.

Dưới đây là các bước thực hiện:

  1. Thực hiện commit ban đầu:

    git add file1 file2  # Thêm các file bạn muốn commit
    git commit -m "Commit message"​
  2. Thực hiện các thay đổi mới: Nếu bạn đã thực hiện thêm các thay đổi và muốn thêm chúng vào commit cuối cùng, sử dụng lệnh git add để đưa chúng vào khu vực staged.

    git add additional_file​
  3. Sử dụng git commit --amend --no-edit:

    git commit --amend --no-edit​
    • --amend: Cho phép bạn sửa đổi commit cuối cùng.
    • --no-edit: Bảo Git sử dụng thông điệp commit trước đó mà không mở trình soạn thảo để chỉnh sửa nó. Nếu bạn đã thực hiện thêm các thay đổi và không muốn thay đổi thông điệp commit, sử dụng tùy chọn này.

    Lúc này, Git sẽ mở một cửa sổ hoặc trình soạn thảo cho phép bạn kiểm tra và chỉnh sửa lại các thay đổi (nếu có) và thông điệp commit (nếu bạn không sử dụng --no-edit). Nếu bạn chỉ muốn thêm các thay đổi mới mà không muốn sửa thông điệp commit, bạn có thể lưu và đóng cửa sổ mà không thay đổi gì.

  4. Lưu và đóng trình soạn thảo: Sau khi kiểm tra và chỉnh sửa nếu cần, lưu và đóng trình soạn thảo. Đối với --no-edit, bạn có thể lưu và đóng ngay lập tức nếu không muốn sửa thông điệp commit.

  5. git push -f or git push -f origin/yourBranch

Lưu ý rằng việc thực hiện git commit --amend --no-edit thay đổi lịch sử commit, nên nếu bạn đã chia sẻ commit với người khác hoặc đã đẩy lên remote repository, hãy thận trọng với việc sửa đổi lịch sử để tránh tình trạng không nhất quán.

Tại sao không nên sử dụng sử dụng --force trong git

Việc sử dụng --force trong Git có thể mang lại những tác động mạnh mẽ lên lịch sử commit và làm thay đổi lịch sử chia sẻ của nhánh. Dưới đây là một số lý do tại sao bạn nên cẩn trọng khi sử dụng --force:

  1. Ghi đè lịch sử: Khi bạn sử dụng --force, bạn đang bắt Git ghi đè lịch sử commit hiện tại của nhánh bằng lịch sử mới mà bạn đang đẩy lên. Điều này có thể gây ra vấn đề nếu người khác đã thực hiện pull lịch sử cũ và sau đó bạn thực hiện --force để thay đổi lịch sử.

  2. Xung đột dữ liệu: Nếu có người khác đã thực hiện commit lên repository trung tâm (remote repository) và bạn thực hiện --force, có thể xảy ra xung đột dữ liệu. Nếu không giải quyết xung đột một cách cẩn thận, dữ liệu có thể bị mất mát hoặc hỗn loạn.

  3. Nguy cơ mất dữ liệu: Nếu bạn đẩy lịch sử mới lên và lịch sử này không chứa những thay đổi quan trọng từ lịch sử cũ, có thể dẫn đến việc mất mát thông tin quan trọng hoặc dẫn đến vấn đề khi tích hợp các phiên bản khác nhau.

  4. Ẩn vết: Việc sử dụng --force có thể làm ẩn đi các vết trong lịch sử commit. Những vết này có thể là một dấu hiệu quan trọng của quá trình phát triển và sự thay đổi trong mã nguồn. Khi sử dụng --force, bạn có thể làm mất đi thông tin quan trọng này.

  5. Không an toàn khi làm việc nhóm: Trong môi trường làm việc nhóm, việc sử dụng --force có thể tạo ra khó khăn và hiểu lầm giữa các thành viên nhóm. Cần sự hiểu biết và sự đồng thuận khi sử dụng lệnh này để tránh tình trạng lịch sử không nhất quán.

Tóm lại, khi sử dụng --force, hãy thận trọng và chắc chắn rằng bạn đã hiểu rõ tác động của nó. Nếu có khả năng, hãy sử dụng cách tiếp cận khác như thương lượng với đồng đội, sử dụng --force-with-lease (điều này giúp tránh việc ghi đè khi có thay đổi trên remote), hoặc tìm kiếm cách giải quyết xung đột mà không cần sử dụng --force.

 

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday