如何将develop分支中的git提交合并到一个功能分支

时间:2013-07-25 13:48:48

标签: git git-merge git-rebase feature-branch

我的git仓库中有一个开发分支和一个功能分支。我添加了一个开发提交,现在我想将该提交合并到我的功能分支。如果我这样做

git checkout feature
git merge develop

我最终得到了合并提交。由于我将频繁地将关于开发的新提交合并到我的功能分支,所以我想避免所有这些不必要的合并提交。我看到这个answer建议做一个git rebase develop,但它最终将我的分支方式倒转得太远而且rebase失败了。

更新 我最终做的是

git checkout feature
git merge develop # this creates a merge commit that I don't want
git rebase # this gets rid of the merge commit but keeps the commits from develop that I do want
git push

更新:我刚刚注意到,当我合并然后rebase到功能分支时,开发时的原始提交会获得不同的哈希。我不认为这就是我想要的,因为最终我会将功能合并到开发中,我猜这不会很好。

2 个答案:

答案 0 :(得分:30)

要将一个分支集成到另一个分支,您必须合并或重新绑定。因为在任何其他地方没有引用的引用(不合并到其他本地分支;没有被推送到任何远程分支)的rebase提交是唯一安全的,所以合并通常会更好。

如果您的功能分支纯粹是本地的,那么您可以在开发之前对其进行重新定义。但是,理解rebase如何工作需要时间,在此之前,很容易意外地产生重复或丢弃的提交。合并提交可能看起来很嘈杂,但合并保证始终是安全和可预测的。

要获得更好的视图,请尝试在图表中记录所有内容:

git log --all --graph --oneline --decorate

您是否真的需要 develop合并到feature的提交也值得考虑。通常情况下,在feature合并到develop之后,这些事情可能会分开。

如果您经常发现develop上需要feature代码,则可能表示您的功能分支运行时间太长。理想情况下,功能应该以一种独立的方式进行分割,而不需要在整个过程中进行定期集成。

答案 1 :(得分:11)

如果您只需要develop分支中的一个提交,您可以在feature分支中挑选它:

 git checkout feature
 git cherry-pick -x <commit-SHA1>

提交将作为新的提交应用于您的分支(假设它不会产生冲突),并且当您合并回feature分支时,Git将处理它而不会发生冲突。