我有origin/master
主代码和我自己的本地development
分支。当我完成开发时,我想将结果合并到master
并推送到origin
。
我的本地git看起来像那样:
* 5555 (HEAD, origin/master master) merged development, master code v 2
|\
| * 4444 (development) some
| * 3333 feature
| * 2222 added
|/
* 1111 master code v 1
当我在git push
上master
时,我希望origin/master
只提交:1111
和2222
,所以它看起来像是:< / p>
* 5555 (HEAD, master) merged development, master code v 2
* 1111 master code v 1
但是当我git push origin mainline
时,那么开发的所有三个提交都会被推送。
修改
merge
或merge --squash
,我的问题只是推送“主要”提交路径,而不是development
垃圾答案 0 :(得分:1)
在您的开发分支中git rebase -i 2222
。您的编辑器将打开以下内容:
pick 2222 added
pick 3333 feature
pick 4444 (development) some
将最后两行改为以&#39; f&#39;开头。对于 fixup :
pick 2222 added
f 3333 feature
f 4444 (development) some
保存并退出编辑器。立即查看您的日志:
$ git log --oneline
pick 2345 added
pick 1111 master code v 1
最新提交现在是分支中三个更改的组合。你现在可以继续挑选变成主人:
git checkout master && git cherry-pick 2345
或者您可以将主重新绑定到您的分支,然后合并回主服务器:
git rebase master && git checkout master && git merge development
最终结果将大致相同。
如果您使用共享存储库模型,则此工作流将导致您的本地开发分支与远程开发分支不同。您可以在进行这些更改后重置本地开发分支,或使用临时分支来执行rebase。 (如果你打算保留分支。)
答案 1 :(得分:1)
我认为你的问题可能有拼写错误,但听起来你只想将development
中完成的所有工作合并到master
作为一个提交,这是正确的吗?如果是这种情况,那么您只需将development
分支上的提交压缩为一个提交,然后将它们合并到master
:
git checkout development
git rebase -i HEAD~3
# After done squashing
git checkout master
git merge development
git push origin master
或者,作为@akaRem suggests in his answer,您可以在development
分支上执行软重置或混合重置,并将所有更改重新提交为一次提交:
git checkout development
git reset --soft 1111
git commit
git checkout master
git merge development
git push origin master
答案 2 :(得分:1)
在这个简单的案例中,交互式rebase是一种矫枉过正。我发现git reset --soft
是一种更简单,更快捷的解决方案:
git reset --soft 1111
您对2222,3333,4444的所有更改现在都未取消注释,但已暂存并将添加到提交中。验证一切是否正确然后
git commit -m "<Insert your meaningful commit message here>"
答案 3 :(得分:0)
您可以尝试执行git --reset ...
,然后在一次提交中提交更改并将其推送到原始