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

时间:2010-04-28 15:11:52

标签: git git-commit amend

我真的不明白如果我检查旧提交,做一些修改并使用git commit --amend提交会发生什么。

这种变化会自动传播到未来的提交吗?它是如何工作的?

3 个答案:

答案 0 :(得分:4)

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

                  {HEAD}
                  {master}
---[A]---[B]---[C]

现在您修改C,创建新提交D

                  {HEAD}
                  {master}
---[A]---[B]---[D]
            \
             \
              [C]

C目前仍在那里。但是,它不再被任何分支引用,因此下次发生垃圾收集时,它将被扫除。

答案 1 :(得分:2)

为了补充约翰的答案,如果你修改了一个旧的提交,那么它的孩子就什么都不会发生。

       old commit
            v
o--o--o--o--o--o--o--o--o < original branch tip
          \
           o  < ammended old commit & new branch tip

也许您想要做的事情可以通过interactive rebase that squashes commits完成。

答案 2 :(得分:1)

使用与旧提交相同的父级创建新提交,并且您当前的分支现在引用新提交。旧提交仍在对象数据库中,可以使用git reflog找到。