要旨
・コミットメッセージを修正しようとしたら、typoが原因でcommitされてしまった
・ファイルの中身を変えずに戻したいときは"sudo git reset --soft"
当時の状況
共用のサーバーで複数人で作業をしており以下みたいな感じで編集されたファイルが溜まっていた。
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: ore.txt
modified: tanin1.txt
modified: tanin2.txt
modified: tanin3.txt
そこで自分が編集したファイルore.txt
のみcommitしたが、commitメッセージをミスってしまい、"git commit --amend"と打とうとしたが"git commit -amendou"とtypoしてしまった。
# git add ore.txt
# git commit -m "俺が編集しししし"
# git commit -ammendou
するとエディタが開かれずChanges not staged for commit
状態のファイルが含まれたcommitが出来ていた!
コミットメッセージを確認すると、
Date: Sun May XX XX:XX:XX 2018 +0900
mendou
ううむ、mendou(面倒)だとのことだ。。。。
勝手に他人の編集内容をコミットしてしまった。。。
何が起きたか?
git-commit の公式ドキュメントを見ればわかる。
-a
オプションは編集されたファイルや削除されファイルを自動探知してステージングするオプションだ。
-m
オプションはコミットメッセージを指定するオプションだ。
すなわち、-am
までがオプションとして解釈されてしまい、modified状態のファイルが全てステージングされて、mendou
の部分がコミットメッセージにされてコミットされてしまったのだ。
対処
実はそこまで面倒ではなく(タイトル詐欺)、ファイルの編集内容を変えずに戻せばよかった。
また、自動でステージングされたファイルがそのままステージングされていたのでresetした。
# sudo git reset --soft (戻したいコミットID)
# git reset tanin1.txt tanin2.txt tanin3.txt
なお、--soft
のところを--hard
にするとこいつら"tanin1.txt tanin2.txt tanin3.txt
"の他人が編集した内容が消えてしまうので注意すること。