假设我们的 commit tree 如下:
R-A-B-C-D-E-HEAD
接下来要移除 B 和 C 的 commit tree, 变成,
R-A-D'-E-HEAD
有两种方式可以移除 B & C
# detach head and move to D commit git checkout < SHA1-for-D >
# move HEAD to A, but leave the index and working tree as for D
git reset --soft < SHA1-for-A >
# Redo the D commit re-using the commit message, but now on top of A
git commit -C < SHA1-for-D >
# Re-apply everything from the old D onwards onto this new place
git rebase --onto HEAD < SHA1-for-D > master
# push it
git push --force
git cherry-pick < SHA1 of D >
另一种方法是利用 cherry-pick 方式
git rebase --hard < SHA1 of A > git cherry-pick < SHA1 of D >
git cherry-pick < SHA1 of E >
這會直接忽略 B 跟 C 的 history,詳細資料可以查詢 git help cherry-pick 或者是 git help rebase
No comments:
Post a Comment