代码之家  ›  专栏  ›  技术社区  ›  Olivier Verdier

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

  •  0
  • Olivier Verdier  · 技术社区  · 14 年前

    如果我签出一个旧的commit,做一些修改,然后使用 git commit --amend .

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

    3 回复  |  直到 9 年前
        1
  •  4
  •   John Feminella    14 年前

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

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

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

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

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

        2
  •  2
  •   hasen    14 年前

    为了补充约翰的回答,如果你改变了一个旧的承诺,它的孩子们什么也不会发生。

           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 .

        3
  •  1
  •   Christoffer Hammarström    14 年前

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

    推荐文章