[Git] git add, commit, push の操作をそれぞれの段階で取り消す方法
以下をそれぞれの段階で cancel, rollback したい。
- git add
- git commit
- git push
Contents
add を取り消す
git checkout
add したファイルをステージから削除する。
コミット前。
% git checkout ファイル名
こちらの方が直感的か。
% git reset HEAD -- ファイル・ディレクトリ名
commit を取り消す
git reset
指定したコミットまで戻る。
オプション --hard
でファイルの状態も戻る。
% git reset --hard 6cc6cbe939b62d878816ef917aabfe39f77b0bd0
commit を修正する場合
取消して、修正したい。
git commit --amend
コメントを間違えたり、ファイルを add し忘れた場合、これを書き換える。
% git commit --amend -m 'fixed issue #1, AppleScript に全ての処理をまとめ、空白 のパスを cd できるよう修正した。'
commit の取消を間違えた場合
git reflog
で確認。
% git reflog
間違えた操作を git reset
で戻す。
$git reset --hard HEAD@{1}
git revert
このあたりの使い分けがまだ分かっていない。
push を取り消す
git push -f
上記の手順でローカル master を修正したが、リモート origin に push されているので、これも取り消す。
% git push -f origin master
force push する。
リモートの push のみを取り消す
ローカル上のコミットを残して、github の push を取り消したいときは、このようにするそう。
% git push -f origin HEAD^:master
リモートの push とローカルの変更を取り消す
が、自分の環境では動かなかったので、ローカルの変更は消えてしまいますが下記で対応。
% git rebase -i HEAD~2
% git push origin +master
実例
状況。
% git log
commit 9e06cb940e61e8c35f762457d77909b1d1008589
Author: DriftwoodJP <****@gmail.com>
Date: Sun Feb 9 17:52:36 2014 +0900
Revert "AppleScript に全ての処理をまとめ、空白のパスを cd できるよう修正した
This reverts commit 6cc6cbe939b62d878816ef917aabfe39f77b0bd0.
commit 6cc6cbe939b62d878816ef917aabfe39f77b0bd0
Author: DriftwoodJP <****@gmail.com>
Date: Sun Feb 9 17:35:58 2014 +0900
AppleScript に全ての処理をまとめ、空白のパスを cd できるよう修正した。
commit 0983977d31af10a184a32e82e3b98eb4382e91e3
Author: DriftwoodJP <****@gmail.com>
Date: Fri Dec 27 17:33:43 2013 +0900
added OpenInTerminal
commit cac399da0e1a9141b307c7eae43c60cfff0f4598
1つめのコミットを取り消して、2つめのコミットのコメントを変更する。
% git reset --hard 6cc6cbe939b62d878816ef917aabfe39f77b0bd0
HEAD is now at 6cc6cbe AppleScript に全ての処理をまとめ、空白のパスを cd できるよう修正した。
% git commit --amend -m 'fixed issue #1, AppleScript に全ての処理をまとめ、空白 のパスを cd できるよう修正した。'
[master 66413c8] fixed issue #1, AppleScript に全ての処理をまとめ、空白のパスを cd できるよう修正した。
3 files changed, 128 insertions(+), 511 deletions(-)
rewrite OpenInTerminal.app/Contents/document.wflow (66%)
create mode 100644 "OpenInTerminal.app/Icon\r"
github へ force push する。
% git push -f origin master
Counting objects: 15, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (9/9), 1.29 KiB | 0 bytes/s, done.
Total 9 (delta 4), reused 0 (delta 0)
To git@github.com:DriftwoodJP/automator-workflows.git
+ 9e06cb9...66413c8 master -> master (forced update)
% git log
commit 66413c817c3ee696138bf801835784250ae882c1
Author: DriftwoodJP <****@gmail.com>
Date: Sun Feb 9 17:35:58 2014 +0900
fixed issue #1, AppleScript に全ての処理をまとめ、空白のパスを cd できるよう
commit 0983977d31af10a184a32e82e3b98eb4382e91e3