And*_*Wan 4 git version-control rebase git-merge
我做了一个主干的分支,并提交/进行了很多更改.我经常会通过从trunk合并来更新分支(例如,20次提交,然后是合并更新,20次提交然后是合并更新等).
现在我想在我的分支中压制所有东西.我该怎么做(使用Git Extensions或控制台)?
我试着输入:
git rebase -i HEAD~200
Run Code Online (Sandbox Code Playgroud)
但我不知道要压扁多少次.我尝试计算Git Extensions中的提交,但很难看到,因为它显示了分支提交和主干提交的所有内容的混合.菜单"仅显示当前分支"没有帮助.
要重新绑定从分支出来以来所做的所有提交,master可以使用以下命令:
git rebase -i `git merge-base HEAD master`
Run Code Online (Sandbox Code Playgroud)
git merge-base 找到当前分支与主服务器之间最近的共同祖先(即两者都可用的最后一个提交).
将它传递给git rebase你获得所有提交的列表,因为master你可以自由地挤出(或者你将放在那里的任何分支).
注意:这不会区分你的和合并提交,但据我所知,这不是你想要的.
注意2:注意在推送到远程仓库后重写历史记录可能需要强制推送,这在与其他人一起工作时非常麻烦.
既然你需要压缩这么多的提交,你可以使用下面的方法:
假设myBranch原样:
...M---A---B---...---N---...---X myBranch
Run Code Online (Sandbox Code Playgroud)
如果您需要压缩来自Ato 的提交X,您只需要找到提交的父级A(如M上图中的提交),然后使用命令
git checkout myBranch
git reset --soft <commit id for M>
git commit -m 'squash commit from A to X'
Run Code Online (Sandbox Code Playgroud)
然后提交myBranch将是(壁球提交是S):
...M---S myBranch
Run Code Online (Sandbox Code Playgroud)