ファイルやディレクトリを以前のバージョンに戻したいときには以下のように使い分けます。
git checkout
git reset
git revert
git checkout
git revert
を使います。間違えて変な修正を加えて保存したファイルを,最後にcommitした状態に戻す。ただしgit add
はまだ実行していない場合。
$ git checkout HEAD .
HEAD は現在作業しているブランチ(もしくはそのID)をさす。これは省略可能なので,以下でも良い。
$ git checkout .
ただし,新しく作ったファイルが削除されることはない。 特定のファイル名のみ戻す時には,その名前を指定する。
$ git checkout <file name>
git add
の取り消し(stagingの取り消し)
$ git reset HEAD <file name>
staging状態にあるファイル全てについて取り消す時にはファル名の指定は無しで。git add
をしてしまったが, stagingも,実際にファイルやディレクトリに対して行った操作も取り消したい時$ git reset --hard HEAD
$ git reset --soft HEAD~
$ git reset HEAD~
$ git reset --mixed HEAD~
HEAD~
は,現在作業しているブランチの一つ古いIDを指す。$ git reset --hard HEAD~
履歴を確認し,戻したいバージョンIDを確認して,git checkout
で戻す。
$ git log
commit 989d476c5ab7fb30bb0eb1ca8f5b917860c9c719`
Author: Jun Nishii
Date: Wed May 24 13:22:45 2017 +0900
First commit
特定のファイルの履歴を見たいときには-p <ファイル名>
をつける$ git show 989d476c5ab7fb30bb0eb1ca8f5b917860c9c719 --word-diff=color
$ git checkout 989d476c5ab7fb30bb0eb1ca8f5b917860c9c719 *
戻したバージョンを最終バージョンにしたいときには,ここでcommitする。(さらにファイルを修正後でももちろんOK)
$ git commit -a -m "バージョンを戻す"
以下のように文書ファイルをいじっていたとする
ここで,序論の修正に後悔して,序論のみをもとに戻したくなったととき。
$ git revert <序論を修正したバージョンのID>
git push
したファイルは,その後削除してもリポジトリに過去データとして残る。これを完全に削除する方法。
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <path to the file or directory>' --prune-empty --tag-name-filter cat -- --all
情報源