使用 git 修改旧提交时会发生什么?

Oli*_*ier 1 git git-amend git-commit

我真的不明白如果我检查旧的提交,进行一些修改并使用git commit --amend.

该更改会自动传播到未来的提交吗?它是如何工作的?

Joh*_*lla 5

在 git 中,提交只是对象。当你这样做时git commit --amend,你只是用同一个父级创建一个新的提交。最初看起来像这样:

                  {HEAD}
                  {master}
---[A]---[B]---[C]
Run Code Online (Sandbox Code Playgroud)

现在您修改C并创建一个新的提交D

                  {HEAD}
                  {master}
---[A]---[B]---[D]
            \
             \
              [C]
Run Code Online (Sandbox Code Playgroud)

旧的C暂时还在那里。但是,它不再被任何分支引用,因此下次发生垃圾收集时,它将被清除。

  • 垃圾收集是由“git gc”完成的,当 git 决定需要清理的东西时,它会定期运行(尽管它可以手动运行)。默认情况下,只有至少两周大的松散对象才会被修剪。结果是,只要你不花一个月的时间才意识到这一点,如果你认为“D”不是你想要的,你就可以拿回旧的“C”。 (3认同)
  • @Jefromi:+1,感谢您的帮助。对于大多数人来说,“垃圾收集”通常意味着非常短的时间范围,因此值得注意的是,您几乎总是可以在 Git 中说“哎呀,我不是故意这样做的”。 (2认同)