要約
addした新規ファイルはgit reset --hard
によって消えるので注意.
恐怖の git reset --hard
それはある夏の日のことです.
gitリポジトリの中で,untrackedファイルを作成し,git reset --hard
を行いました.
(まだgitのリポジトリにaddもcommitもされていない新規のファイルのことを,git上ではuntracked filesと呼びます.)
touch foo # 新規ファイルを作成
git status
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
# foo
# nothing added to commit but untracked files present (use "git add" to track)
git reset --hard # untrackedファイルには影響しない
untracked fileがある状態でgit reset --hard
をしても,それらのファイルには何の影響もありません.
しかし,untracked fileをaddした状態でgit reset --hard
をすると大変なことになります(なりました).
touch foo # 新規ファイルを作成
git add foo # addする
git status
# Changes to be committed:
# (use "git restore --staged <file>..." to unstage)
# new file: foo
git reset --hard # addしたuntracked fileが消える
そうなんです.addしたuntracked filesが消えてしまいます.
これは,git add
でインデックスに追加されたuntracked fileがgit reset --hard
によって,
ファイルの存在ごとリセットされてしまうことで起こります.
対策:git reset --hard
する前に
上記の問題の対策として,git reset
してからgit reset --hard
するのがよいのではと思います.
git reset
をするとインデックス登録がリセットされるため,untracked filesの状態に戻ります.
そして,git reset --hard
で変更があるファイルだけリセットされます.
毎回git reset
を打つのは面倒なので,.bashrcなどにエイリアスを登録しておきましょう.
alias git reset --hard='git reset && git reset --hard'
その他,良い対策方法あればご教授ください~