如何压缩一个分支中的提交?
How to squash commits in one branch?
我创建了一个主干分支并进行了 submitting/committing 大量更改。每隔一段时间我就会通过从主干合并来更新分支(例如 20 次提交,然后是合并更新,再有 20 次提交然后是合并更新,等等)。
现在我想压缩我分支中的所有内容。我该怎么做(使用 Git 扩展程序或控制台)?
我试着输入:
git rebase -i HEAD~200
但我不知道有多少次要压缩。我尝试计算 Git 扩展中的提交,但很难看到,因为它显示了分支提交和主干提交的所有内容的混合。菜单 "Show current branch only" 没有帮助。
要重新设置自从 master
分支以来所做的所有提交,您可以使用以下命令:
git rebase -i `git merge-base HEAD master`
git merge-base
找到当前分支和主分支之间最近的共同祖先(即两者都可用的最后一次提交)。
将其传递给 git rebase
后,您将获得自从 master
(或您将放入其中的任何分支)分支以来的所有提交列表,您可以自由压缩。
注意:这不会区分您的提交和合并提交,但据我了解,这不是您要查找的内容。
注意2:注意推送到远程仓库后重写历史可能需要强制推送,这在与其他人在单个分支上工作时非常麻烦。
由于需要压缩这么多的commit,可以使用下面的方式:
假设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
此代码将在交互模式下变基您当前的分支提交,并将变基提交置于主控之上
git rebase -i HEAD~$(git rev-list --count origin/master..) && git pull --rebase origin master
我创建了一个主干分支并进行了 submitting/committing 大量更改。每隔一段时间我就会通过从主干合并来更新分支(例如 20 次提交,然后是合并更新,再有 20 次提交然后是合并更新,等等)。
现在我想压缩我分支中的所有内容。我该怎么做(使用 Git 扩展程序或控制台)?
我试着输入:
git rebase -i HEAD~200
但我不知道有多少次要压缩。我尝试计算 Git 扩展中的提交,但很难看到,因为它显示了分支提交和主干提交的所有内容的混合。菜单 "Show current branch only" 没有帮助。
要重新设置自从 master
分支以来所做的所有提交,您可以使用以下命令:
git rebase -i `git merge-base HEAD master`
git merge-base
找到当前分支和主分支之间最近的共同祖先(即两者都可用的最后一次提交)。
将其传递给 git rebase
后,您将获得自从 master
(或您将放入其中的任何分支)分支以来的所有提交列表,您可以自由压缩。
注意:这不会区分您的提交和合并提交,但据我了解,这不是您要查找的内容。
注意2:注意推送到远程仓库后重写历史可能需要强制推送,这在与其他人在单个分支上工作时非常麻烦。
由于需要压缩这么多的commit,可以使用下面的方式:
假设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
此代码将在交互模式下变基您当前的分支提交,并将变基提交置于主控之上
git rebase -i HEAD~$(git rev-list --count origin/master..) && git pull --rebase origin master