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




cocomaru
今回は変更の取り消しをやってみようか!前回言ってたって間違えたって何したの?
hiromin
う、うん、実は最後の「ファイルの削除」のところで間違えて「git rm」したあとにコミットしちゃった…
cocomaru
なるほど(笑)じゃあ、とりあえず削除の取り消しからやってみよう!その後は変更の取り消しについて、いくつかケースがあるから、それも教えるね!
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
例えば、直前のコミットでindex.htmlをコミットしていたが、index_2.htmlも含めたかった。その場合「git add index_2.html」をして、「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>

cocomaru
これで取り消しの操作の説明は終わるけど、どう?戻ったでしょ??
hiromin
う…うん。
cocomaru
??…どうした?また何かあった?
hiromin
…1個前じゃなくて、2個前のコミットIDを指定しちゃった(´ε`;)
cocomaru
…もう知らない(∩゚д゚)アーアー
hiromin
そ、そんなぁ…cocomaruせんせい〜(´;ω;`)ブワッ

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

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

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

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

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

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

Git入門#09(ブランチを作成してみよう)

2018.08.10








コメントを残す

メールアドレスが公開されることはありません。