我用:
git checkout -b testbranch
我做了20次提交。
现在我想要压缩这20个提交。我是这样做的:
git rebase -i HEAD~20
如果我不知道有多少次提交呢?有没有什么方法可以做到:
git rebase -i all on this branch
我用:
git checkout -b testbranch
我做了20次提交。
现在我想要压缩这20个提交。我是这样做的:
git rebase -i HEAD~20
如果我不知道有多少次提交呢?有没有什么方法可以做到:
git rebase -i all on this branch
当前回答
由于我在这里提出的解决方案中遇到了一些麻烦,我想分享一个非常简单的解决方案(无论如何都是有效的):
git merge origin/master && git reset --soft origin/master
前面的合并cmd确保,在提交时,没有来自master的最近更改会出现在你的头上(倒置)!之后,只需提交更改并执行git push -f
其他回答
由于我在这里提出的解决方案中遇到了一些麻烦,我想分享一个非常简单的解决方案(无论如何都是有效的):
git merge origin/master && git reset --soft origin/master
前面的合并cmd确保,在提交时,没有来自master的最近更改会出现在你的头上(倒置)!之后,只需提交更改并执行git push -f
如果你使用基于IDE的JetBrains,如IntelliJ Idea和prefare,使用命令行GUI:
进入版本控制窗口(Alt + 9/Command + 9) -“日志”选项卡。 在树中选择创建分支的点 右键点击它->重置当前分支到这里->选择软(!!)(重要的是不要失去你的变化) 按下对话框窗口底部的重置按钮。
就是这样。您未提交所有更改。现在如果你重新提交,它会被压缩
对于喜欢点击的人的解决方案:
安装源代码树(免费) 检查你的提交是什么样的。很可能你有类似的东西 右键单击父提交。在我们的例子中,它是主分支。
您可以通过单击一个按钮来取消上一个提交。在我们的例子中,我们需要点击2次。您也可以更改提交消息 结果非常棒,我们已经准备好了!
旁注:如果你把你的部分提交推到远程,你必须在挤压后强制推
在阅读了几个关于压缩的Stackoverflow问题和答案后,我认为这是一个很好的压缩分支上所有提交的代码行:
git reset --soft $(git merge-base master YOUR_BRANCH) && git commit -am "YOUR COMMIT MESSAGE" && git rebase -i master
这是假设master是基础分支。
解决方案- 1
A.把master拖进你的特性分支(确保更新了master)
git pull origin master
B.软复位至master
git reset --soft master
C.提交更改
git commit -m “commit message"
D.做git推
git push --force
解决方案- 2
使用git rebase压缩提交
A.
$git rebase -i HEAD~3 (HEAD~<no. of commits you want to squash>)
B.你会得到一个交互式提示,你需要选择顶部提交,并在那些你想要合并/挤压的前面插入挤压或s。
注意:请确保在插入模式下进行更改并保存文件;(VI编辑器中的wq)
C.现在你会得到另一个交互式提示,你需要把#放在你不想要的commit消息前面,或者添加你自己的消息。再次保存文件,您的提交将成功地更改基准。
干杯!