31

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

git checkout feature
git merge 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 到功能分支时,develop 上的原始提交会获得不同的哈希值。我认为这不是我想要的,因为最终我会将功能重新合并到开发中,我猜这不会很好。

4

2 回答 2

29

要将一个分支集成到另一个分支,您必须合并或变基。由于只有在其他任何地方都没有引用(没有合并到其他本地分支;没有推送到任何远程)的 rebase 提交才是安全的,所以通常最好合并。

如果您的功能分支纯粹是本地的,您可以在开发基础上对其进行变基。然而,理解 rebase 是如何工作的需要时间,在你这样做之前,很容易意外地产生重复或丢弃的提交。合并提交可能看起来很嘈杂,但可以保证合并始终是安全且可预测的。

为了获得更好的视图,请尝试将所有内容一起记录在图表中:

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

同样值得考虑的是您是否真的需要合并developfeature. 通常它们是可以分开的东西,直到以后feature合并develop

如果您经常发现确实需要develop代码,feature那么这可能表明您的功能分支运行时间过长。理想情况下,功能应该以可以独立处理的方式进行拆分,而无需在此过程中进行定期集成。

于 2013-07-25T14:16:12.293 回答
13

如果你只想从develop分支提交一次,你可以在你的分支中挑选它feature

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

提交将作为新的提交应用到您的分支之上(前提是它不会产生冲突),并且当您合并回feature分支时,Git 将在没有冲突的情况下处理它。

于 2013-07-25T19:08:12.643 回答