2016-02-29 96 views
22

压缩提交git的意思是什么。我如何在Github中压缩提交?什么是压缩提交git?

我是新来的Git,我要求被分配到一个新的coala分析器的bug。我修复了这个bug,现在我被要求压缩我的提交。我该怎么做?

回答

42

你可以认为的Git为你的工作目录(IES)的快照的高级数据库。

Git的一个很好的功能是能够重写提交历史。
这样做的主要原因是很多这样的历史记录只与生成它的开发人员有关,因此在将其提交到共享存储库之前必须简化或更好。

压缩提交意味着,从习惯的角度来看,将在所述提交中引入的更改移动到其父项中,以便以一个两次提交结束。
如果您多次重复此过程,则可以将n减少到

视觉上,如果你在提交标记开始开始你的工作,你要想这

Git commits squashing

您可能会注意到新的提交有蓝色稍深色调。这是故意的。

在Git的挤压与再次基于实现所谓衍合互动一种特殊形式的。
简化当你变基一组提交到一个分支,应用由承诺,因为他们做的,而不是原来的祖先开始介绍的所有变化。

视觉线索

enter image description here

注意再次的蓝色深浅不同。

交互式底垫让你选择如何提交应重订基期,如果你运行此命令:

git rebase -i branch 

你最终会与该名单上提交一个文件将被重建基础

pick ae3... 
pick ef6... 
pick 1e0... 
pick 341... 

我没有名字的提交,但这些四个一的目的是从提交开始

关于此列表的好处是,它可编辑
你可以省略提交,或者你可以用压扁它们
您只需要将第一个字改为壁球即可。

pick ae3... 
squash ef6... 
squash 1e0... 
squash 341... 

如果您关闭编辑器并没有合并冲突被发现,你结束了这段历史:

enter image description here

在你的情况,你不想变基到另一个分支,而是进入之前的提交。
为了改造历史如图所示的第一个例子,你要像

git rebase -i HEAD~4 

改变运行的东西的“命令”,以壁球对所有提交,但第一,然后关闭编辑器。


备注篡改历史

在git的承诺从来没有编辑,就可以修剪,做出不可达,克隆,但没有改变。
当您重新绑定时,您实际上正在创建新的提交。
旧的不再可以通过任何参考,所以没有显示在历史中,但他们仍然存在!

这就是你实际得到的底垫:

enter image description here

如果您已经将他们推某处,改写历史,实际上使一个分支!

+0

不错 - 尽管原始提交评论会发生什么 - 它们是否合并成一个大的提交评论或丢失了? –

+0

从'man git rebase':_建议的提交 消息为折叠的提交是提交 第一次提交的消息和那些与“squash”command_ –

+0

的链接感谢 - 这很好理解! –