Git合并时不包括从一个分支到另一个分支的提交

Ale*_*bin 15 git

在开发过程中,我经常需要提交并推送"中间"提交,即提交代码不可编译或更改内容等等.我不想做这样的提交,但这是继续我的工作所必需的从办公室到家,有时为其他开发人员提供他们可以开始工作的基础.

我以为我找到了解决这个问题的方法:

  1. 我创建一个单独的"dev"分支并进行所有中间提交.

  2. 一旦代码处于良好状态,请进行合并以掌握.因此,master不会包含"中间"提交,只会包含"正常"提交.

  3. 删除所有中间提交的"dev"分支.

但这不起作用.当我进行合并时,不仅包括合并提交到master,还包括来自"dev"分支的所有"中间"提交.所以删除"dev"分支什么都没有,它的"中间"提交就在那里.

所以问题是:是否有可能以master只包含自己的提交+合并提交的方式进行合并,而不包括第二个分支的提交?如果这是不可能的,你能否告诉我如何实现我的目标 - 能够临时保存中间结果,还能在以后无缝删除它们?

Gar*_*yde 22

当您将"dev"分支合并为master时,请尝试

git checkout master
git merge --squash dev
git commit -m "Add new feature."
Run Code Online (Sandbox Code Playgroud)

--squash选项会将您的所有中间变更压缩为一个重大变化.

git rebase --interactive如果您需要更多有限控制(例如,重新排序提交和执行多个小南瓜),您也可以使用.这个答案解释了git merge --squash和之间的区别git rebase --interactive.

  • @jszakmeister,因为他正在将当地开发分支的变更合并到他当地的主人结账,这很好.当他推动他的改变时,对其他开发者来说,好像他的改变是一个巨大的提交.换句话说,压缩允许你有一个提交,说"添加新功能",而不是多个,"哎呀.修复拼写错误",提交. (2认同)