Git

Git入門#08(変更を取り消してみよう)

cocomaru
cocomaru
今回は変更の取り消しをやってみようか!前回言ってたって間違えたって何したの?
hiromin
hiromin
う、うん、実は最後の「ファイルの削除」のところで間違えて「git rm」したあとにコミットしちゃった…
cocomaru
cocomaru
なるほど(笑)じゃあ、とりあえず削除の取り消しからやってみよう!その後は変更の取り消しについて、いくつかケースがあるから、それも教えるね!
hiromin
hiromin
お願いしまぁす(;_;)

ファイルの削除の取り消しをやってみよう

どうも、cocomaruです。

今回はファイル操作の取り消しについて、何点か紹介したいと思います。
…が、とりあえず、hirominがやってしまった「ファイル削除の取り消し」をやってみましょう!^^

git reset –hard <コミットID>

一旦、hirominが行ったファイル削除を実行してみましょう。

# ファイル削除 
$ git rm index.html
rm 'index.html'

# ファイル削除をコミット 
$ git commit -m "ファイルをわざと削除!"
[master c190dd5] ファイルをわざと削除!
 1 file changed, 11 deletions(-)
 delete mode 100644 index.html

# ログを確認し、削除がリポジトリに保存されていることを確認 
$ git log --oneline -n 2
c190dd5 (HEAD -> master) ファイルをわざと削除!
e033a11 git diff練習用に1行追加

では、いよいよ削除の取り消しをやってみます!
まず「git log」で「コミットID」が表示されますので、削除を実行したコミットの直前のコミットIDをコピーしてください。

私の環境だとコミットIDは「e033a11」ですので、これを使って元の状態に戻してみます。

# 削除の直前まで戻る 
$ git reset --hard e033a11
HEAD is now at e033a11 git diff練習用に1行追加

# 戻っている事を確認 
$ git log --oneline -n 2
e033a11 (HEAD -> master) git diff練習用に1行追加 ※戻ってる!
dec7055 git status練習用に1行追加

いかがでしょうか?
これでファイルの削除が取り消しされたと思います!

これでhirominも一安心ですね^^

またGitを使っていると、作業をやり直ししたいケースが、いくつかあるかと思います。
せっかくなので各ケースの取り消し方法について学んでいきましょう!

色々なケースのGitの操作の取り消しをやってみよう

ファイルの変更を元に戻したい

  • git checkout ファイル名
  • git checkout ディレクトリ名
  • git checkout . ※全てのファイル・ディレクトリを元に戻す

ステージング・エリアへ追加した変更(git add)の取り消し

  • git reset HEAD ファイル名
  • git reset HEAD ディレクトリ名
  • git reset HEAD . ※全てのファイル・ディレクトリを元に戻す

直前のコミットの内容が間違えたので、取り消して修正をコミット

  • git commit –amend

リモートリポジトリ(みんなで使うGitサーバのリポジトリ)にpush(アップロード)した後は、「–amend」を付けず、通常通りコミットしてください。

間違ってコミットをしたので取り消し(取り消した履歴は残さない)

  • git reset <--soft|--hard> HEAD^ ※一個前の状態に戻る
  • git reset <--soft|--hard> HEAD~1 ※上と同じ
  • git reset <--soft|--hard> HEAD^^ ※二個前の状態に戻る
  • git reset <--soft|--hard> HEAD~2 ※上と同じ
  • git reset <--soft|--hard> HEAD~~ ※上と同じ
  • git reset <--soft|--hard> <コミットID> ※該当コミットIDの状態まで戻る

・git reset –soft :作業用ディレクトリの内容はそのままでコミットだけを取り消す。
・git reset –hard :コミットを取り消し、作業用ディレクトリも取り消した内容に書き換えられる。
※「HEAD」は現在のブランチを指す。

「git commit –amend」と同様にpushした後は使用しないようにしましょう!

間違ってコミットをしたので取り消し(取り消した履歴は残す)

  • git revert <コミットID>

さいごに

…さて!以上で取り消しの操作は終わりです!
みなさんはきちんと取り消しはできましたでしょうか?

もし「git reset」で間違えたコミットIDを指定しちゃったとしても大丈夫!

git reset –hard ORIG_HEAD」で取り消しの取り消しができます!
ぜひ試してみてください^^

また何回か注意事項としてお伝えしましたが、チームメンバーで共有しているGitにpushした後に、
コミット履歴を変更すると思わぬ事故になる可能性があるので、使用するときは十分に注意してください。

次回はGitのブランチやマージについて説明していきます。
長くなりそうなので、何回かに分けますが、よろしくお願いします!

ではまた次回もよろしくお願いしますっ!

Git入門#09(ブランチを作成してみよう) ブランチを表示してみよう cocomaruです。 今回からブランチについて学んでいきましょう。 ブランチはG...