1

我真的不明白如果我检查一个旧的提交,做一些修改,然后使用git commit --amend.

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

4

3 回答 3

5

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

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

现在你修改C,创建一个新的提交D

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

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

于 2010-04-28T15:17:44.630 回答
2

为了补充约翰的回答,如果你修改一个旧的提交,它的孩子不会发生任何事情。

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

也许您想要做的事情可以通过压缩提交的交互式 rebase来完成。

于 2010-04-28T16:16:54.803 回答
1

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

于 2010-04-28T15:18:08.227 回答