我有这棵树
* commit origin/master
| * commit origin/my-feature-branch
| * commit
| * commit
| * commit
|/
| * commit origin/other-feature-branch
|/
我想保留origin/master
,但我想压缩origin/my-feature-branch
并使其保持干净。我的战略"是:
git checkout my-feature-branch
git rebase -i HEAD~4
# ... leave first pick line and change all others in squash
# ... change commit messages into one
git push origin :my-feature-branch
git push origin my-feature-branch
我的新树现在很干净。
* commit origin/master
| * commit origin/my-feature-branch
|/
| * commit origin/other-feature-branch
|/
这是正确的方法吗?
答案 0 :(得分:1)
你基本上有了正确的想法,虽然不是在推送之前删除远程分支,但你可以直接强制推送到
git push origin my-feature-branch -f
你想要首先删除远程分支的唯一原因是如果在远程分区上禁用了强制推送,那么首先删除它是一种排序“欺骗”并绕过该限制的方法......尽管如此限制在那里,有人不能让你强迫推动,所以确保重写分支对你的团队来说实际上是可以的。
关于将重写提交推送到公共分支的强制性警告:如果您的分支与其他开发人员共享,强制推送重写提交将迫使其他开发人员使用新提交重新同步他们的工作,因为他们都会有旧的副本。这可能是一个困难的过程,取决于团队的Git技能,因此请确保您的团队实际上可以做到这一点。