こんにちは。monipla for facebookを担当している佐藤(ま)です。
アライドでは「大佐」と呼ばれております。
今回は、Gitの「取り消す操作」について書きたいと思います。
調べてみるとたくさん記事が出てくるのですが、コマンドだけという記事も多いので、ここでは、コマンドの結果をできるだけSource Treeの画面で確認していく形で進めていきたいと思います。
(Source Treeの画面操作だけでも同様のことはできますが。)
◇ リポジトリ構成
今回は以下のようなリポジトリを用意しました。
1 2 3 4 5 6 7 8 9 10 |
sample_repository/ - src/ - 1.txt - 2.txt - 3.txt - README - D.txt - C.txt - B.txt - A.txt |
コミット履歴
◇ コミット前の変更を取り消す
1. 編集したワーキングツリーのファイルをコミットに戻す
1 2 |
# A.txtを編集後 $ git checkout A.txt |
※ またsrcディレクトリ内の編集したファイルをすべて戻したい場合はディレクトリを指定すればOKです。
1 |
$ git checkout src/ |
2. インデックス ⇛ ワーキングツリーへ戻す
git resetコマンドを使います。上記のA.txtをインデックスへ入れた状態の場合、上記コマンドでの取り消しはできません。インデックスからワーキングツリーへ戻す場合は、以下のコマンドとなります。
1 2 3 4 |
# インデックスからワーキングツリーへ $ git reset A.txt # ちなみにインデックスへ追加は以下となります。 $ git add A.txt |
Source Treeでいうと、ここのエリアを行ったり来たりしているのと同じですね。
また、git resetコマンドには、「–soft , –mixed[no option] , –hard」というオプションがあり、インデックスに入れた変更をワーキングツリーではなくコミットに戻す場合には「–hard」オプションを使います。
1 |
$ git reset --hard A.txt |
◇ コミット後の変更を取り消す
ここでも git reset コマンドを使います。ここでは「–soft , –mixed[no option] , –hard 」オプションすべての実行結果を、「C」のコミットに戻す操作で確認してみます。
1 2 |
# コマンド形式 $ git reset [オプション] [ハッシュ値 など] |
1. –soft
1 |
$ git reset --soft 1a01328135f2c0eed8f0fe55a357096853820761 |
「C」のコミットまで戻り、それまでの変更はステージングエリアに入ります。
(既にインデックスやワーキングツリーに変更があった場合はそのままです。)
2. –mixed(no option)
1 |
$ git reset --mixed 1a01328135f2c0eed8f0fe55a357096853820761 |
「C」のコミットまで戻り、それまでの変更はワーキングツリーに入ります。
(既にインデックスに変更があった場合は同時にワーキングツリーへ移動します。)
3. –hard
1 |
$ git reset --hard 1a01328135f2c0eed8f0fe55a357096853820761 |
「C」のコミットまで戻り、それまでの変更はインデックス、ワーキングツリーから削除されます。
◇ 特定のコミットを取り消す
過去にコミットした特定のコミットを取り消す場合などには、以下のコマンドを使います。
1 |
$ git revert 1a01328135f2c0eed8f0fe55a357096853820761 |
「C」のコミットが取り消され、新しくコミットされます。
Gitには便利なコマンドが揃っているので、他にも色々確認して行きたいと思います。
ではまたー
よく使うであろうことをできるだけ分かりやすく発信していきます。 Gitの情報を無駄にキャッチアップしてます。