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

33

我在我的git仓库中有一个develop分支和一个feature分支。我向develop分支添加了一个提交,现在我希望将该提交合并到我的feature分支中。如果我这样做:

git checkout feature
git merge develop

我最终会得到一个合并提交。由于我经常将develop分支上的新提交合并到我的特性分支中,所以我想避免所有这些不必要的合并提交。我看到了这个答案建议执行git rebase develop,但它会将我的分支回溯得太远,导致重置失败。

更新: 我最终采取的方法是

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时可以“压缩”提交记录,这样可以避免分支上有太多的提交记录。请查看http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html。 - Houdini
4
重新设定基准是答案,如果它对你不起作用,那么你应该问另一个问题,即为什么它不起作用。 - user229044
2个回答

30

要将一个分支集成到另一个分支中,你必须执行合并(merge)或变基(rebase)操作。由于只有那些没有被其他地方引用的提交才能安全地进行变基操作(即未被合并到其他本地分支,也未推送到任何远程分支),通常最好执行合并操作。

如果你的功能分支是完全本地的,你可以将其变基在develop分支之上。但是,了解变基工作原理需要时间,在你掌握之前,很容易不小心产生重复或丢失的提交。合并提交可能看起来杂乱无序,但合并操作始终保证是安全和可预测的。

为了更好地查看,尝试在图形中将所有内容记录在一起:

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

值得考虑的是,您是否真正需要将develop分支上的提交合并到feature分支上。通常情况下,这些提交可以保持独立,直到稍后将feature分支合并到develop分支中。

如果您经常发现需要在feature分支上使用develop分支的代码,则可能表明您的特性分支存在过长的问题。理想情况下,特性应该分拆成可以独立工作的部分,而无需在途中进行定期集成。


14

如果你只想要从develop分支获取一个提交,可以在你的feature分支中挑选它:

如果您只想从develop分支获取一个提交,则可以在您的feature分支中进行精选:

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

如果提交不会产生冲突,它将作为一个新的提交应用在您的分支顶部,并且当您合并回feature分支时,Git将处理它而不会发生冲突。


这可能是一个比合并更好的选择,因为它可以在将功能合并回开发时保持历史记录清晰。 - oidualc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接