我用:
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 rebase -i 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消息前面,或者添加你自己的消息。再次保存文件,您的提交将成功地更改基准。
干杯!
对于喜欢点击的人的解决方案:
安装源代码树(免费) 检查你的提交是什么样的。很可能你有类似的东西 右键单击父提交。在我们的例子中,它是主分支。
您可以通过单击一个按钮来取消上一个提交。在我们的例子中,我们需要点击2次。您也可以更改提交消息 结果非常棒,我们已经准备好了!
旁注:如果你把你的部分提交推到远程,你必须在挤压后强制推
假设你在特征分支上:
在特性分支中找到第一个提交。如果你正在使用gitlab或github,你可以直接在分支中查看它,并从那里复制散列,或者你可以使用以下命令:
Git日志<source_branch>..< feature_branch >——漂亮=格式:% h
执行以下命令:
git reset --soft <base_commit_hash>
git commit --amend --no-edit
现在在这个阶段,在您的本地,您有一个提交,其中包括在所有以前的提交中所做的更改。
回顾它,你需要用力推它。在强制推送之后,所有的更改都将合并到一个提交中,而您的分支将只有1个提交。
在特征分支中强制推送
git push --force
在阅读了几个关于压缩的Stackoverflow问题和答案后,我认为这是一个很好的压缩分支上所有提交的代码行:
git reset --soft $(git merge-base master YOUR_BRANCH) && git commit -am "YOUR COMMIT MESSAGE" && git rebase -i master
这是假设master是基础分支。
How
你需要得到分支的合并基
git merge-base master your-branch
# 566f8438e0cd0e331ceb49a9cb0920143dfb065c
然后你就可以改基了
git rebase -i 566f8438e0cd0e331ceb49a9cb0920143dfb065c
# then squash/pick/do commit messages
或者只是进行软重置并提交所有内容
git reset --soft 566f8438e0cd0e331ceb49a9cb0920143dfb065c
git add .
git commit -m "The only commit"
自动化
如果你经常这样做,你可以把这些放在你的.bashrc使用自动化。
g-rebase-branch() {
git branch --show-current | xargs git merge-base master | xargs git rebase -i
}
g-one-commit() {
local last_commit_message=`git show -s --format=%s`
git branch --show-current | xargs git merge-base master | xargs git reset --soft
git add -A
git commit -m "$last_commit_message"
git commit --amend
}
然后直接在终端上做这些。
g-one-commit
但如果你合并的是与master不同的分支,那么你可以用“$1”替换master来做到这一点
g-one-commit staging