84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
例如遠端master分支上有100次提交記錄
現在想把1-10次提交合併成一次提交,【就好像我只提交過一次一樣】其他11-100次提交保持不變。如何實現?
看了git rebase -i ,好像只能合併本地分支,合併以後怎麼影響遠端分支呢?
git rebase -i HEAD~99然後把最遠的10次提交前面的pick改為squash。 然後強制提交 git push -f試試看,不知道行不行
樓上說的方式沒錯,但是應該是 git rebase -i HEAD~100 吧。HEAD~99 只能讀到 2~100 次提交,讀不到第一次的。
git rebase -i HEAD~100
HEAD~99
另外,找到最遠的 10 次提交之後,其實不一定要改成 squash(或者s),如果你不打算保留提交信息,用 fixup(或者f)就行了。 。
修改之後一定是要 git push -f 的,因為你的 timeline 和後續的 commit hash 都變了,當然你的程式碼不會變
git push -f
鑑於從最後一條翻到第一條可能會比較久。 。再提供一個想法(以下用 表示變量,不需要打。但其它符號都是要打的):
在當前 branch 基礎上新建一個 branch: git checkout -b newBranch
git checkout -b newBranch
在新 branch 上回滾到提交第一次之前: git reset --hard <commit1Hash>
git reset --hard <commit1Hash>
Cherry pick 前十條 commit,放到緩衝區: git cherry-pick -n <commit1Hash>..<commit10Hash>
git cherry-pick -n <commit1Hash>..<commit10Hash>
提交這十個commit。 git commit -m "<xxxx>"
git commit -m "<xxxx>"
Cherry pick 剩餘 commit,不放到緩衝區(直接加入 timeline): git cherry-pick -n <commit11Hash>..<commit100Hash>
git cherry-pick -n <commit11Hash>..<commit100Hash>
這樣你就在一個新的 branch 上搞好了你想要的。合併到你要修改的 branch 就行
git rebase -i HEAD~99
然後把最遠的10次提交前面的pick改為squash。
然後強制提交 git push -f
試試看,不知道行不行
樓上說的方式沒錯,但是應該是
git rebase -i HEAD~100
吧。HEAD~99
只能讀到 2~100 次提交,讀不到第一次的。另外,找到最遠的 10 次提交之後,其實不一定要改成 squash(或者s),如果你不打算保留提交信息,用 fixup(或者f)就行了。 。
修改之後一定是要
git push -f
的,因為你的 timeline 和後續的 commit hash 都變了,當然你的程式碼不會變鑑於從最後一條翻到第一條可能會比較久。 。再提供一個想法(以下用 表示變量,不需要打。但其它符號都是要打的):
在當前 branch 基礎上新建一個 branch:
git checkout -b newBranch
在新 branch 上回滾到提交第一次之前:
git reset --hard <commit1Hash>
Cherry pick 前十條 commit,放到緩衝區:
git cherry-pick -n <commit1Hash>..<commit10Hash>
提交這十個commit。
git commit -m "<xxxx>"
Cherry pick 剩餘 commit,不放到緩衝區(直接加入 timeline):
git cherry-pick -n <commit11Hash>..<commit100Hash>
這樣你就在一個新的 branch 上搞好了你想要的。合併到你要修改的 branch 就行