はじめに
ファイルのリネームや移動をするとき、みなさんは git mv
コマンドを使っていますか?
git mv old_file.rb new_file.rb
git mv
は、単にリネームや移動するだけでなく、その操作をGitの履歴として残すことができる便利なコマンドです。
とても便利なこのコマンドですが、使い方を少し間違えると履歴をうまく追えなくなることがあります。
履歴が切れてしまうパターン
以下のような操作を一度に済ませたくなることはありませんか?
# 初期ファイルを作成
echo "puts 'Hello'" > old_file.rb
git add .
git commit -m "old_file.rb作成"
# git mvと修正を同時に実行
git mv old_file.rb new_file.rb
echo "puts 'こんにちは'" > new_file.rb
git add .
git commit -m ファイル移動とファイル修正
# この状態で履歴を確認
git log --follow new_file.rb
結果:old_file.rb 時代の履歴が表示されません😢
このように 「移動+修正を同時にコミット」 してしまうと、git log --follow
で過去の履歴を正しく追えなくなることがあります。
対策:コミットを分ける
この問題を防ぐには、ファイルの移動と修正を別のコミットに分けることです。
# 初期ファイルを作成
echo "puts 'Hello'" > old_file.rb
git add .
git commit -m "old_file.rb作成"
# git mvを実行
git mv old_file.rb new_file.rb
git add .
git commit -m ファイル移動
# 修正は別コミットで
echo "puts 'こんにちは'" > new_file.rb
git add .
git commit -m ファイル修正
# この状態で履歴を確認
git log --follow new_file.rb
結果:old_file.rb の履歴までしっかり追えます🎉
まとめ
git mv
と修正は、別コミット にするのがベストです。
そうすることで、git log --follow
で過去の履歴を正確にたどることができるようになります。
コメント