Đến với cách tiếp cận này (và nó có lẽ giống hệt như sử dụng rebase tương tác) nhưng đối với tôi nó đơn giản.
Lưu ý: Tôi trình bày phương pháp này để minh họa cho những gì bạn có thể làm hơn là một giải pháp thay thế hàng ngày. Vì nó có nhiều bước (và có thể một số hãy cẩn thận.)
Giả sử bạn muốn thay đổi cam kết 0
và bạn hiện đang trênfeature-branch
some-commit---0---1---2---(feature-branch)HEAD
Thanh toán cho cam kết này và tạo ra một quick-branch
. Bạn cũng có thể sao chép nhánh tính năng của mình làm điểm khôi phục (trước khi bắt đầu).
?(git checkout -b feature-branch-backup)
git checkout 0
git checkout -b quick-branch
Bây giờ bạn sẽ có một cái gì đó như thế này:
0(quick-branch)HEAD---1---2---(feature-branch)
Giai đoạn thay đổi, cất giấu mọi thứ khác.
git add ./example.txt
git stash
Cam kết thay đổi và thanh toán trở lại feature-branch
git commit --amend
git checkout feature-branch
Bây giờ bạn sẽ có một cái gì đó như thế này:
some-commit---0---1---2---(feature-branch)HEAD
\
---0'(quick-branch)
Rebase feature-branch
lên quick-branch
(giải quyết bất kỳ xung đột trên đường đi). Áp dụng stash và loại bỏ quick-branch
.
git rebase quick-branch
git stash pop
git branch -D quick-branch
Và bạn kết thúc với:
some-commit---0'---1'---2'---HEAD(feature-branch)
Git sẽ không trùng lặp (mặc dù tôi thực sự không thể nói ở mức độ nào) cam kết 0 khi nổi loạn.
Lưu ý: tất cả các băm cam kết được thay đổi bắt đầu từ cam kết ban đầu chúng tôi dự định thay đổi.