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