somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【git】取り消し関連

TortoiseGitでコミットするようになって気づいた取り消し関連についてのまとめです。

Amend Last Commit

Amend Last Commitというチェックボックスにチェックをすると、直前のコミットとマージしてコミットしなおすことができます。直前にしたコミットをやり直す(git commit --amend)メッセージも直せますし、後に見たときに見やすくなると思います。

ただし、この取り消しをmasterにマージしても、まとまっていなかったです。グラフからブランチが分岐していました。コミットIDは別のものであるためです。

ファイル変更の取消(add前)

変更されていることを確認します。

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    src/Chapter01/Dollar.php
#       deleted:    tests/Chapter01/DollarTest.php
#
no changes added to commit (use "git add" and/or "git commit -a")

(use "git checkout -- <file>..." to discard changes in working directory)とあるように、「git checkout -- ファイル名」で変更を無かったことにできます。

ファイル変更の取消(add後)

ファイルをaddしたあとにstatusを行います。

$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#

to unstageと書かれているように、変更の追跡をとりやめるためにgit rm --cached を実行します。これにより、コミット対象外になります。

コミットの取消(ファイルの内容はそのまま)

この取り消しは、コミットログまで消えてしまうので注意してください。ただし、ファイルの内容はそのままなので、コミットしなおすことで元に戻ります。

$ git reset --soft HEAD^^
# HEAD^は1つ前のコミット、^^は2つ前のコミットです
# 2つ前の場合、1つ前のコミットも取り消されます・・・

コミットの取消(ファイルの内容も変更されてしまう)

この取り消しは、コミットログまで消えてしまうので注意してください。バックアップが無い場合、元に戻すことは不可能です。

$ git reset --hard HEAD^

参考