例如远程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
鉴于从最后一条翻到第一条可能会比较久。。再提供一种思路(以下用 <xxx> 表示变量,不需要打出来<和>。但其它符号都是要打的):
在当前 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 都变了,当然你的代码不会变鉴于从最后一条翻到第一条可能会比较久。。再提供一种思路(以下用 <xxx> 表示变量,不需要打出来<和>。但其它符号都是要打的):
在当前 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 就行