2012年10月22日月曜日

【Git】削除したことをindexに登録する

Gitを使っていて面白い挙動に出会ったのでメモ。

シチュエーションとしてはこんな感じ。

  1. ファイル"foo"を少し編集して、OSのコマンドで"bar"にリネームした。
  2. git add bar
  3. git rm foo


1の直後は、fooが削除されたことになっているが、もちろんfooが削除されたことはインデックスには登録されていない。すなわちコミット対象ではない。
# Changes not staged for commit:

# deleted:    foo

そして、当然barはトラックされていない。
# Untracked files:
# bar

2の直後は、barが新規に追加されたことになっている。インデックスにaddされたので、barはコミット対象である。
# Changes to be committed:
# new file:   bar

3の直後は、fooがbarにリネームされたことになっている!(ここが面白いと思ったところ)
# Changes to be committed:
# renamed:    foo -> bar


以前先輩と実験したときも、Gitのリネーム判断は結構面白い挙動をするなあという印象だった。本当に名前を変えたのか、削除して新規作成したのかにかかわらず、ファイルの内容の類似度でリネームかどうかを判断しているらしい。

0 件のコメント:

コメントを投稿