gitで色々取り消したい人に送るベストプラクティス

どうもKuboです。

gitを使っていると間違ったコマンドを打ってしまって取り消したいことがありませんか?

今回ご紹介するのはGitでやってしまったって時に元に戻すためのコマンドです。

各ケースごとに戻し方をご紹介します。

今日の格言

Kubo
Kubo

やり直せない失敗なんてないんですよ

ケース1:間違って編集したファイル

git statusコマンドを打った時ファイルを更新するつもりがないファイルが出てきたり、デバッグコードを入力して元に戻したい時などありませんかこんな時はこちら

git checkout "ファイル名"
引数にディレクトリに名を指定するとディレクトリ配下のファイル/ディレクトリが編集前の状態に戻る
git checkout "ディレクトリ名"

 

  • 新規作成したファイルは、この方法では戻りません素直にファイルを削除

ケース2:ステージング(add)してしまったファイルを戻したい

編集したファイルを意気揚々とaddしてしまったけどファイルが間違っていた、ディレクトリごとaddしたけど不要なファイルが含まれていたっていう時はこちら

※commitまでしてしまった場合はこの方法ではありません

git reset "ファイル名"
ステージングした全てを戻したい時はこちらです。
git reset HEAD

※ステージングを取り消しなので編集した内容は戻りません

 

ケース3:commitの取り消し

まだリモートリポジトリへpushする前のcommitの取り消し方法です。
これは様々なケースが分かれると思うので更に細分化して紹介します。

直前のcommitを取り消し

直前のcommitを取り消したいだけの場合は以下のコマンドで戻ります。

git reset --soft HEAD^

 

  • –softモードであれば、コミットを取り消した後も、ステージングとワークディレクトリの状態はそのまま残りますので、その後、修正を追加してコミットをやり直すことが可能

過去のコミットした状態へ戻す

過去にコミットした状態へ戻したい時はこちら

git reset --hard HEAD^

 

  • –hardオプションを付けることにより、HEADのみでなく、ステージング、およびワークディレクトリ上の変更もすべて取り消してくれます。

進む

これは取り消しではないのかもしれませんが、間違えてた箇所を修正してcommitすれば正しい状態に戻ります。

間違えた過去を取り消しすのではなく正せばいいのです。

ケース4:間違えてpushした内容を取り消し

リモートへpushしたあとに間違いに気付くことありますよねそんな時はこちら

コミットを取消してpush

まずローカルリポジトリでcommitを取り消す

git reset --hard HEAD^

そしてpush!

git push -f origin master

 

  • -fオプションを付けると強制的にpush出来る

変更の取り消しをコミットしてpush

変更管理上はこちらが正しいかもしれません

まずはコミットの変更を取り消し

git revert HEAD

commitした結果をpush

git push origin master

 

  • こちらは-fオプションを付けなくてもエラーにならない

 

如何でしたでしょうか?
うまく取り消しは出来ましたか?

他に困った状態があればコメントに書いて頂ければ回答いたします。

以上、Kuboでした。

タイトルとURLをコピーしました