壁球合并后的重新定位?

时间:2012-03-29 06:31:53

标签: git git-rebase

我有一个'主'分支和几个主题分支。假设主分支主要用作发布候选者,并且在该分支上不进行任何开发工作。

主题分支是多个,由团队共享。一些分支机构有多个开发人员在开发它们。所有主题分支都定期从主分支重新定位。

为了清理'master'分支中的历史记录,我在将主题代码合并到主分支时进行了'git merge --squash'。这完全没问题。

现在 - 当主题分支被重新定位时 - 提交正在重复。有没有办法在'git merge --squash'成功后清理主题分支上的提交?

2 个答案:

答案 0 :(得分:8)

让我们假设您有以下情况:

A - B - C (master)
 \
  D - E (topic)

如果您使用--squash将主题合并到master中,您将获得类似

的内容
A - B - C - F (master)
 \
  D - E (topic)

其中F包含来自D和E的所有更改。由于主题分支已在主数据库(通过F),因此主数据库上的重新定位主题没有意义。您可以将主题分支移动到F,例如

,而不是重新定位
git checkout master
git branch -f topic F

哪个收益率:

A - B - C - F (master/topic)

现在您需要做的就是推动移动的主题分支:

git push -f origin topic

答案 1 :(得分:3)

我曾经和Magnus做过同样的事情,只需要几个命令:

git checkout master
git merge --squash topic
git commit -m "Add topic feature"

git branch -D topic
git checkout -b topic

git push -f origin topic