1

古いコミットをチェックアウトし、いくつかの変更を加えて、 を使用してコミットするとどうなるか、よくわかりませんgit commit --amend

その変更は将来のコミットに自動的に反映されますか? それはどのように機能しますか?

4

3 に答える 3

5

git では、コミットは単なるオブジェクトです。の場合git commit --amend、同じ親を持つ新しいコミットを作成しているだけです。最初は次のようになります。

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

を修正Cして、新しい commit を作成し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

やりたいことは、コミットを押しつぶすインタラクティブなリベースで実現できるかもしれません。

于 2010-04-28T16:16:54.803 に答える
1

古いコミットと同じ親を持つ新しいコミットが作成され、現在のブランチが新しいコミットを参照するようになります。古いコミットはまだオブジェクト データベースにあり、git reflog.

于 2010-04-28T15:18:08.227 に答える