ファイル名を変更する - Git による版管理環境を構築する

SPECIAL


ファイル名を変更する

Git で管理しているファイルのファイル名を変更するためには、次のようにします。

git mv 変更前のファイル名 変更後のファイル名

このようにすることで、更新前のファイルに指定したファイルが削除対象としてステージングされ、そのファイルが変更後のファイル名に変更されて、それが追加対象としてステージングされます。

このとき "git status" では、次のようなレポートが表示されました。

# On branch Test3
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: test.txt -> test2.txt
#

ファイル名が変更されたことがステージングされて、ワーキングコピーの該当ファイルについても、実際にファイル名が変更となっている感じでした。

リポジトリの内部的な記録としては、変更前のファイルを "git rm" して、変更後のファイルを "git add" したことと同じ扱いになるそうです。ただ、そのように操作をしてみても、"git status" では "renamed:" とはレポートされないようでしたので、実際のところは良くわからないところですけど。

ともあれ、このようにステージングされたら、後はコミットを行うことで、リポジトリ内のファイル名を変更することができます。

 

ここで注意点として、ファイル名の変更を取り消したいときに、この "git status" で出てくる説明通りに "git reset HEAD 変更後のファイル名" としただけでは、名前変更後のファイルを追加するためのステージングだけが解消されて、名前変更前のファイルを削除対象とするステージングが残ってしまうので注意が必要です。

ファイル名の変更を完全に取りやめたい場合には、それとあわせて "git reset HEAD 変更前のファイル名" として、変更前のファイルが削除対象としてステージングされていることも解除してあげる必要があります。

そして、これらの操作を行った後でも、ワーキングコピーにはファイル名が変更された後のファイルが残されるようなので、このファイルのファイル名を元に戻してあげるか、削除の上で "git checkout -- 変更前のファイル名" としてリポジトリから再取得するかのどちらかを行う必要があるようでした。

 

ちなみに、対象のファイルが既にステージングされた状態だった場合にも、"git mv" によるファイル名の変更は行うことができるようです。

ただその場合、ステージングされていなかった場合と比べて "git status" のレポート内容が少し異なるようでした。

# On branch Test3
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: test.txt
# new file: test2.txt
#

このように、変更前のファイルの削除と、変更後のファイルの追加とが、ステージングされている様子がはっきりとわかる感じになりました。この感じは "git mv" ではなく、"git rm" して "git add" した時と同じような感じですね。

 

目次