【问题标题】:Differences between Git merge --squash and --no-commitGit 合并 --squash 和 --no-commit 的区别
【发布时间】:2012-03-24 20:36:44
【问题描述】:

正如标题所说,我不太清楚git merge --squashgit merge --no-commit 之间的区别。

据我了解git merge 的帮助页面,这两个命令都会将我留在更新的工作树中,在那里仍然可以编辑然后进行最终提交(或多次提交)。

有人可以澄清这两个选项的区别吗?我什么时候可以用一个代替另一个?

【问题讨论】:

    标签: git merge squash


    【解决方案1】:
    git merge --no-commit
    

    这就像普通的合并,但不会创建合并提交。此提交将是合并提交:当您查看历史记录时,您的提交将显示为正常合并。

    git merge --squash
    

    这会将更改合并到您的工作树中,而无需创建合并提交。当您提交合并的更改时,它看起来就像您的分支上的一个新的“正常”提交:在历史记录中没有合并提交。这几乎就像您对所有合并的更改进行了挑选。

    【讨论】:

    • @quaylar 合并提交并不是真正的特殊提交,只是它有多个父提交。您可以看到提交的父母,例如 git log --parents(而 git log --merges 仅显示此类提交)。
    • @PhilippWendler 所以本质上:通过查看历史我总是知道合并提交,这个提交是合并的结果(是哪些分支对该合并做出贡献的信息也保留?)。使用 --squash 无法知道此提交是合并的结果。我理解正确吗?
    • @quaylar 是的,你理解正确。但是,不能保证您可以准确看到合并的分支,因为可以删除/重命名分支等。
    • @quaylar 我真的建议您使用这些命令来亲自了解它在历史上的样子。请记住,您始终可以在 git 中撤消操作,只需执行“git reset --hard HEAD”即可。
    • "这就像一个普通的合并,但不会创建一个合并提交。这个提交将是一个合并提交:当你查看历史时,你的提交将显示为正常合并。” 我是唯一一个发现这种解释完全没有意义的人吗?并且“squash”不是将所有更改都放在一个提交中(这与挑选多个提交完全不同)?
    猜你喜欢
    • 2012-08-12
    • 2013-05-25
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2020-02-29
    • 2014-01-17
    相关资源
    最近更新 更多