2012-03-29 68 views
9

我有一个'主'分支和几个主题分支。假设主分支主要用作候选发布版,并且此分支上没有开发工作。压扁合并后重新绑定?

主题分支是几个并由团队共享。一些分支机构有不止一个开发人员在为他们工作。所有主题分支都定期从主分支重新分配。

为了清理'master'分支中的历史记录,我在合并代码从主题到主分支时做了'git merge --squash'。这工作得很好。

现在 - 当主题分支被重新设置 - 提交重复。在'git merge --squash'成功后,有没有办法清除主题分支上的提交?

+0

它不会在这种情况下工作得很好[已删除的文件](http://stackoverflow.com/a/14343784/281545)。也许没有办法去 - 看到[这里](http://stackoverflow.com/questions/1464642/git-merge-squash-repeatedly) – 2013-05-08 18:51:45

回答

7

假设您有以下情形:

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

如果合并话题进入主与--squash你会得到类似

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

其中F包含d和E的所有更改。因为主题分支已经在master(通过F),所以在master上重新激活主题是没有意义的。您可以将主题分支移至F,而不是重新绑定。

git checkout master 
git branch -f topic F 

其中产量:

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

所有你现在需要做的是推动了移动特性分支:

git push -f origin topic 
+0

谢谢!这正是我所需要的。 – mustard 2012-04-06 19:12:01

+0

小心使用压扁 - F可能包含您在主题分支中删除的文件,请参阅http://stackoverflow.com/a/14343784/281545 – 2013-05-08 18:49:09

3

我以前做的同样的事情,马格努斯只是情侣更多命令:

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