Với SVN, thật dễ dàng để hợp nhất ngược một cam kết, nhưng làm thế nào để làm điều đó với Git?
Với SVN, thật dễ dàng để hợp nhất ngược một cam kết, nhưng làm thế nào để làm điều đó với Git?
Câu trả lời:
Để tạo một cam kết mới 'hoàn tác' những thay đổi của một cam kết trước đây, hãy sử dụng:
$ git revert <commit>
Bạn cũng có thể thực sự xóa một cam kết từ một điểm tùy ý trong quá khứ bằng cách khôi phục và sau đó đặt lại, nhưng bạn thực sự không muốn làm điều đó nếu bạn đã đẩy cam kết của mình sang một kho lưu trữ khác (hoặc ai đó đã lấy từ bạn) .
-m <parent number>
tùy chọn git revert
để chỉ định thay đổi nào cần hoàn nguyên. Nếu bạn muốn hoàn tác hợp nhất lịch sử chưa được xuất bản, hãy sử dụng git reset --hard HEAD^1
.
-m
có nghĩa là hợp nhất trong tương lai từ nhánh chưa hợp nhất sẽ không bao gồm các thay đổi so với trước đó hợp nhất! Xem schacon.github.com/git/howto/revert-a-faulty-merge.txt để biết các cách hợp nhất lại chi nhánh chưa được hợp nhất.
Để trở lại một hợp nhất cam kết, bạn cần sử dụng: git revert -m <parent number>
. Vì vậy, ví dụ: để hoàn nguyên cam kết hợp nhất gần đây nhất bằng cách sử dụng giá trị gốc với số 1, bạn sẽ sử dụng:
git revert -m 1 HEAD
Để hoàn nguyên một cam kết hợp nhất trước lần cam kết cuối cùng, bạn sẽ thực hiện:
git revert -m 1 HEAD^
Sử dụng git show <merge commit SHA1>
để xem cha mẹ, đánh số là thứ tự họ xuất hiện, ví dụ:Merge: e4c54b3 4725ad2
tài liệu hợp nhất git: http://schacon.github.com/git/git-merge.html
thảo luận về git merge (khó hiểu nhưng rất chi tiết): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt
git show <merge commit SHA1>
để xem các bậc phụ huynh, việc đánh số là thứ tự chúng xuất hiện ví dụMerge: e4c54b3 4725ad2
git revert -m 1 SHA1
Lệnh đó làm việc để tôi hoàn nguyên một cam kết hợp nhất là một số cam kết hợp nhất trước phần đầu và có nhiều cam kết bên dưới.
git reset --hard HEAD^
Sử dụng lệnh trên để hoàn nguyên các thay đổi hợp nhất.
Nếu bạn không muốn cam kết hoặc muốn cam kết sau (thông báo cam kết sẽ vẫn được chuẩn bị cho bạn và bạn cũng có thể chỉnh sửa):
git revert -n <commit>