【发布时间】:2016-05-04 19:26:16
【问题描述】:
amend 和 squash 命令有什么区别?我尝试了两者,发现两者都在做同样的管理。
【问题讨论】:
标签: git squash git-amend git-squash
amend 和 squash 命令有什么区别?我尝试了两者,发现两者都在做同样的管理。
【问题讨论】:
标签: git squash git-amend git-squash
让我用一些用例来解释一下:
假设你刚刚提交了一些更改,现在你意识到你留下了一些不完整的功能。你开始写代码,
现在你要创建一个新的提交,更好的amend 对最后一个的更改。
如果您想保持消息不变,请使用git log 选择消息。
否则写git commit -m <your message> --amend。
现在您的最后一次提交已经完成,并且带有新消息的新提交取而代之。
现在 Squash,如果您已经在某项功能上工作了几天,并且每天都在提交更改。在完成该功能时,您需要推送该功能。然后您应该将所有更改保留在一次提交中,以便在您提交的代码中发现一些问题时,很容易识别和删除。
转到git log 计算您的提交数量,然后git reset HEAD~<Number of commits>,现在只需创建一个提交,您就可以开始了。
[提示:如果您已经推送了上一次提交,请使用-f 标志强制推送。]
【讨论】:
在 Git 中,提交很少被实际销毁,它们只是成为孤儿,或分离,这意味着它们不会被分支或标签等引用指向或访问。
“修正”和“挤压”是相似的概念。
通常,amending 是一个单一的提交操作,您希望在其中将已暂存的工作与您的 HEAD 提交结合起来。如果您刚刚创建了一个提交并意识到您需要向其中添加一些内容,这将非常方便。只需调用您的提交命令并使用--amend 选项。
挤压是更抽象的术语。我会说修正是一种壁球。每当您合并提交时,您都可以说您正在压缩它们。如果你已经在一个分支上工作了一段时间,并且已经进行了 5 次提交,这些提交加起来应该是 1 次提交,你可以交互地变基以将它们压缩在一起。
Git 中有几种方法可以修改/压缩,但它们都围绕着组织提交历史的概念(这意味着重写分支的历史),本着更容易理解的精神。
【讨论】:
amend 只更改最后一次提交。
squash 就像将多个提交合并为一个提交。
只有一次提交,它们的效果可能看起来很相似。
【讨论】: