LoginSignup
3
0

More than 5 years have passed since last update.

"git commit --amend"を"git commit -ammendou"とtypoしたら面倒なことになった

Last updated at Posted at 2018-05-28

要旨

・コミットメッセージを修正しようとしたら、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"の他人が編集した内容が消えてしまうので注意すること。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0