我做了一个trunk的分支,并提交/提交了很多更改。我经常会通过从trunk合并来更新分支(例如,20次提交,然后是合并更新,20次提交然后是合并更新等)。
现在我想在我的分支中压制所有东西。我该怎么做(使用Git Extensions或控制台)?
我尝试输入:
git rebase -i HEAD~200
但我不知道有多少提交壁纸。我尝试计算Git Extensions中的提交,但很难看到,因为它显示了来自分支提交和主干提交的所有内容的混合。菜单"仅显示当前分支"没有帮助。
答案 0 :(得分:7)
要修改自master
分支以来所做的所有提交,您可以使用以下命令:
git rebase -i `git merge-base HEAD master`
git merge-base
找到当前分支与主服务器之间最接近的共同祖先(即两者都可用的最后一个提交)。
将其传递给git rebase
后,您将获得所有提交的列表,因为从master
(或您将放在那里的任何分支)分支出来,您可以自由压缩。
注意:这不会区分你的和合并提交,但据我所知,这不是你想要的。
注意2:注意在推送到远程仓库后重写历史记录可能需要强制推送,这在与其他人一起工作时非常麻烦。
答案 1 :(得分:2)
由于您需要压缩这么多提交,您可以使用以下方式:
假设myBranch
原作如:
...M---A---B---...---N---...---X myBranch
如果您需要将提交从A
压缩到X
,您只需要找到提交A
的父级(在上图中为提交M
),并且然后使用命令
git checkout myBranch
git reset --soft <commit id for M>
git commit -m 'squash commit from A to X'
然后myBranch
上的提交将是(壁球提交是S
):
...M---S myBranch
答案 2 :(得分:0)
此代码将以交互方式重新构建您当前分支提交的基础,并将重新构建的提交置于master之上
git rebase -i HEAD~$(git rev-list --count origin/master..) && git pull --rebase origin master