1

我已经对重新定位和合并我们的远程分支进行了相当多的研究/实践,但我无法找到最终不会导致重复提交或远程分支的非快速转发的解决方案。这就是我想要做的。

我们有两个分支,master(tracking origin/master)和hebe(tracking origin/hebe)。一个月前适当地hebe分支了。master每天都有几个开发人员在这两个分支上工作。

master正在继续维护,并且在公共代码中有几个错误修复,应该在hebe分支中反映/更新。然而,新代码中的任何一个都不hebe应该进入master

我试过了:

git rebase master hebe

从日志来看,这似乎正是我们想要的,hebe提交位于最新的.masterhebeorigin/hebe

或者也许我们是从错误的方向来解决这个问题,而子模块将是合适的解决方案?

4

1 回答 1

2

您应该只在非常非常非常罕见的情况下重新设置分支,因为您重写了历史记录并因此更改了提交的 sha,这些分支已经被推送并与其他人共享。这会导致您提到的重复提交,因为不同的 sha 意味着 git 的不同提交。
在您的情况下,最好将 master 与

$ git checkout hebe
$ git merge master
$ git push origin hebe

有了这个,您将所有更改从 master 合并到hebe但没有任何东西回到 master 并且所有 shas 保持不变。合并将创建一个所谓的合并提交(如果没有快进合并是可能的)。

因为它是如此重要并导致如此多的混乱,所以我不得不在最后再说一遍:除非您绝对确定自己在做什么,否则永远不要重新设置已经共享的分支。

我强烈建议阅读以下(免费在线提供)书籍http://git-scm.com/book的第三章,以更好地了解合并/变基的工作原理

于 2013-03-12T22:41:33.953 回答