git*_*itq 31 git git-merge git-rebase feature-branch
我的git仓库中有一个开发分支和一个功能分支.我添加了一个开发提交,现在我想将该提交合并到我的功能分支.如果我这样做
git checkout feature
git merge develop
Run Code Online (Sandbox Code Playgroud)
我最终得到了合并提交.由于我将频繁地将关于开发的新提交合并到我的功能分支,所以我想避免所有这些不必要的合并提交.我看到这个答案建议做一个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
Run Code Online (Sandbox Code Playgroud)
更新:我刚刚注意到,当我合并然后rebase到功能分支时,开发时的原始提交会获得不同的哈希.我不认为这就是我想要的,因为最终我会将功能合并到开发中,我猜这不会很好.
ben*_*n_h 30
要将一个分支集成到另一个分支,您必须合并或重新绑定.因为在任何其他地方没有引用的引用(不合并到其他本地分支;没有被推送到任何远程分支)的rebase提交是唯一安全的,所以合并通常更好.
如果您的功能分支纯粹是本地的,那么您可以在开发之前对其进行重新定义.但是,理解rebase如何工作需要时间,在此之前,很容易意外地产生重复或丢弃的提交.合并提交可能看起来很嘈杂,但合并保证始终是安全和可预测的.
要获得更好的视图,请尝试在图表中记录所有内容:
git log --all --graph --oneline --decorate
Run Code Online (Sandbox Code Playgroud)
同样值得考虑的是你是否真的需要develop
合并的提交feature
.通常它们是可以分开的东西,直到feature
合并到develop
以后.
如果您经常发现您确实需要develop
代码,feature
则可能表明您的功能分支太长时间运行.理想情况下,功能应该以这样的方式分割,即它们可以独立工作,而不需要在整个过程中进行定期集成.
Cha*_*esB 12
如果您只想从develop
分支机构进行一次提交,您可以在feature
分支机构中挑选它:
git checkout feature
git cherry-pick -x <commit-SHA1>
Run Code Online (Sandbox Code Playgroud)
提交将作为一个新的应用程序在您的分支上应用(假设它不会产生冲突),当您合并回feature
分支时,Git将处理它而不会发生冲突.