Git - 修正和压缩命令之间的区别

时间:2016-01-27 17:33:39

标签: git squash amend git-squash

修正和壁球命令有什么区别?我尝试了两种方法,发现两者都在做同样的管理。

3 个答案:

答案 0 :(得分:9)

在Git中,提交很少被实际销毁,它们只是成为孤儿,或者分离,这意味着它们不会被分支或标记等引用指向或访问。

"修正"和#34;挤压" 类似的概念。

通常,修改是一个提交操作,您希望将已暂存的工作与HEAD提交相结合。如果您刚刚创建了一个提交并意识到需要向其添加一些内容,这可能非常方便。只需调用您的commit命令并使用--amend选项。

Squashing 是更抽象的术语。我会说修改是一种壁球。每当你结合提交时,你可以说你正在压制它们。如果你已经在一个分支上工作了一段时间并且做了5次提交,那么这些提交应该是1次提交,你可以交互式地重组以将它们压缩在一起。

Git中有几种方法可以修改/压缩,但它们都围绕着组织你的提交历史(这意味着重写分支的历史)的概念,这种方式使得它更易于理解。

答案 1 :(得分:8)

amend仅更改上次提交。

squash就像将多个提交合并为一个提交。

对于一次提交,它们的效果可能看起来很相似。

https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History

答案 2 :(得分:1)

让我用一些用例来解释它:

假设您刚刚提交了一些更改,现在您意识到您留下了一些未完成的功能。你开始写代码, 现在你要创建一个新的提交,最好 amend 对最后一个的更改。 如果您想保持消息不变,请使用 git log 选择消息。 否则写git commit -m <your message> --amend。 现在你的最后一次提交结束了,带有新消息的新提交取而代之。

Now Squash,如果您已经在某个功能上工作了几天并且每天都在不断地提交更改。在完成功能时,您需要推送该功能。那么您应该将所有更改保留在一次提交中,以便在您提交的代码中发现一些问题时,很容易识别和删除。

转到 git log 计算您的提交次数,然后
git reset HEAD~<Number of commits>,现在只需创建一个 Commit 即可。

[提示:如果您已经推送了最后一次提交,请使用 -f 标志强制推送。]