古いコミットをチェックアウトし、いくつかの変更を加えて、 を使用してコミットするとどうなるか、よくわかりませんgit commit --amend
。
その変更は将来のコミットに自動的に反映されますか? それはどのように機能しますか?
古いコミットをチェックアウトし、いくつかの変更を加えて、 を使用してコミットするとどうなるか、よくわかりませんgit commit --amend
。
その変更は将来のコミットに自動的に反映されますか? それはどのように機能しますか?
git では、コミットは単なるオブジェクトです。の場合git commit --amend
、同じ親を持つ新しいコミットを作成しているだけです。最初は次のようになります。
{HEAD}
{master}
---[A]---[B]---[C]
を修正C
して、新しい commit を作成しD
ます。
{HEAD}
{master}
---[A]---[B]---[D]
\
\
[C]
古いC
ものは今のところまだ残っています。ただし、どのブランチからも参照されていないため、次にガベージ コレクションが発生すると、一掃されます。
ジョンの答えを補完するために、古いコミットを修正すると、その子には何も起こりません。
old commit
v
o--o--o--o--o--o--o--o--o < original branch tip
\
o < ammended old commit & new branch tip
やりたいことは、コミットを押しつぶすインタラクティブなリベースで実現できるかもしれません。
古いコミットと同じ親を持つ新しいコミットが作成され、現在のブランチが新しいコミットを参照するようになります。古いコミットはまだオブジェクト データベースにあり、git reflog
.