推送仅掌握合并提交,没有开发历史记录

时间:2014-03-21 18:19:04

标签: git

我有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 pushmaster时,我希望origin/master只提交:11112222,所以它看起来像是:< / p>

* 5555 (HEAD, master) merged development, master code v 2
* 1111 master code v 1 

但是当我git push origin mainline时,那么开发的所有三个提交都会被推送。

修改

  • 我知道我应该mergemerge --squash,我的问题只是推送“主要”提交路径,而不是development垃圾

4 个答案:

答案 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 ...,然后在一次提交中提交更改并将其推送到原始

相关问题