问题 如何将我的更改压缩到单个结果提交并选择主分支?


假设我需要执行一些平均长度(几天)的重构。

我从大师创建“mybranch”,完成工作,有时我执行从master到mybranch的合并(其他一些团队成员应该继续工作,可能我需要进行更改)。过了一会儿,我准备将我的更改合并回主人。

我能挤压吗? 只有我的改变 (不包括来自master的合并的变更集,因为它们不是我的)并且樱桃选择我的作品的一个结果提交到主人?可以做场景吗?


2333
2017-08-27 06:50


起源



答案:


是的。您可以使用小型测试存储库进行确认。做就是了:

git rebase --interactive master mybranch

并选择 squash 对于除第一行之外的所有行。然后你结帐 master 并定期进行快速合并 mybranch


7
2017-08-27 07:34



哦,它甚至会快速前进?没有要求樱桃挑选它? “除了第一个以外的所有线路” - 是什么 first 在这种情况下?我可以压缩除合并之外的所有东西(我想我会在工作过程中从master那里做几次合并) - zerkms
正确。 Rebase始终生成快速可转发的历史记录。基本上,您可以在合并之前而不是之后解决所有冲突。 - Karl Bielefeldt
好的,很酷,谢谢 - zerkms
该 --interactive 选项会在编辑器中弹出一个列表。只需将它作为“选择”放在顶部的提交。合并提交可能甚至不会出现,但即使他们这样做,也不是问题因为你将它合并回来 master 无论如何。 - Karl Bielefeldt
另外,不要忘记启用rerere git config --global rerere.enabled 1。这将有助于避免两次解决任何合并冲突。 - Karl Bielefeldt


答案:


是的。您可以使用小型测试存储库进行确认。做就是了:

git rebase --interactive master mybranch

并选择 squash 对于除第一行之外的所有行。然后你结帐 master 并定期进行快速合并 mybranch


7
2017-08-27 07:34



哦,它甚至会快速前进?没有要求樱桃挑选它? “除了第一个以外的所有线路” - 是什么 first 在这种情况下?我可以压缩除合并之外的所有东西(我想我会在工作过程中从master那里做几次合并) - zerkms
正确。 Rebase始终生成快速可转发的历史记录。基本上,您可以在合并之前而不是之后解决所有冲突。 - Karl Bielefeldt
好的,很酷,谢谢 - zerkms
该 --interactive 选项会在编辑器中弹出一个列表。只需将它作为“选择”放在顶部的提交。合并提交可能甚至不会出现,但即使他们这样做,也不是问题因为你将它合并回来 master 无论如何。 - Karl Bielefeldt
另外,不要忘记启用rerere git config --global rerere.enabled 1。这将有助于避免两次解决任何合并冲突。 - Karl Bielefeldt


在重新定位之后,在之前的“mybranch”中将没有关于那些提交的参考

我会做什么,可能更安全

git checkout mybranch

创建一个分支(它实际上是一个用于变基的临时分支)

git checkout -b movingToMaster

试着改变 movingTomaster 至 master

git rebase -i master

将提示编辑器询问您应该选择哪个提交,或者压缩或编辑...

编辑这些文件,在你的情况下,第一行应保持不变,另一行应改为“选择”为“壁球”,如果你愿意,可以修改你的提交信息。 在对该文件进行足够的更改后保存它。

pick 0a81405 Bug Fix 1
pick 91be655 Bug Fix 2
pick 1200fc7 Bug Fix 3
pick 1211fb7 Bug Fix 4
pick ba77fdf Bug Fix 5

改成

pick 0a81405 Bug Fix 1
squash 91be655 Bug Fix 2
squash 1200fc7 Bug Fix 3
squash 1211fb7 Bug Fix 4
squash ba77fdf Bug Fix 5

保存。然后

git checkout master

移动你的 master 分支到 movingTomaster 通过使用快进合并分支

git merge movingTomaster

注意:它不会有害,因为它只是一个快进合并,不会使你的历史混乱。

如果您愿意,请删除您的movingTomaster分支

git branch -D movingTomaster

4
2017-08-27 07:43



是的,有你。谢谢。但无法获得“并将您的主分支移动到movingTomaster分支” - zerkms
@zerkms:此时,您的主分支仍然没有“单个”提交。你的movingTomaster分支现在应该比master更多提交。 (您可以通过gitk命令进行访问)您需要使用movingTomaster将主分支移动到同一个提交点 - Kit Ho
如何“移动”可以执行?它不只是一个合并(在这种情况下快进)? - zerkms
@zerkms:是的 git merge movingTomaster,它只是一个FF合并,所以它根本不会影响你的提交历史。 - Kit Ho