デタッチされた HEAD 状態で「git commit --amend」を見たことがあります。この質問には、必要以上に複雑な回答が必要です。
git commit --amend
通常の HEAD 状況でどのように機能するかを理解したいと思います。
デタッチされた HEAD 状態で「git commit --amend」を見たことがあります。この質問には、必要以上に複雑な回答が必要です。
git commit --amend
通常の HEAD 状況でどのように機能するかを理解したいと思います。
クリーンな作業状態にあり、リポジトリが次のようになっているとします。
次に実行すると
git commit --amend
コミットメッセージを書き、エディタを保存して終了すると、次のことが起こります:
修正されたコミット ( f42c5 ) は、リポジトリ内のどの参照からも到達できないことに注意してください (したがって、私のグラフでは「透明な」スタイルになっています)。それはまだリポジトリのオブジェクト データベースに存在しますが、Git が定期的なハウスキーピングを実行するか、git gc
ガベージ コレクションを実行して明示的にトリガーすると、最終的に完全に削除されます。
補遺( Jason Baker のコメントに基づく): 修正されたコミットf42c5がリポジトリにまだ存在し、そのコミット ID を見つける方法がある限り (たとえば、マスターブランチの reflogから釣り上げるなど) があることに注意してください。 )、まだチェックアウトできます。ランニング
git checkout master # just to be sure that master is the current branch
git reset --hard f42c5
または(その間、 master で新しいコミットを行ったり、 masterをリセットしたり、 masterブランチ参照を移動したりしていないと仮定します)
git checkout master # just to be sure that master is the current branch
git reset --hard master@{1}
次のような状況になります。
しかし今、コミット31b8eは到達不能になります。
「B」をコミットしたとしましょう
... --- A --- B
^
|
master
HEAD
「B」を修正すると、新しいブランチ ヘッドとなる並列コミットが作成されます。
+---- B
|
... --- A --- B'
^
|
master
HEAD
B' は、B からの変更と、 を発行したときにステージングした変更を組み合わせた結果のコミットですgit commit --amend
。