Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Git GitHub】コミット履歴の確認とコミットを元に戻す方法


gitを使って作業していく中で、gitで誤ってコミットしたものを元に戻したい場合などが発生します。

 

 

 

目次

 

1.コミット履歴の確認

 

その場合ですが、まずは、「git reflog」で過去のコミット履歴を確認します

 

$ git reflog 
6e7c376 HEAD@{0}: commit: third commit
717c754 HEAD@{1}: commit: second commit
3f7b530 HEAD@{2}: commit: first commit

 

 

2.コミットを戻す方法

 

このようにして確認した中で、何段階か前のコミットに戻したい場合には、

 

$ git reset --hard  [リセットしたいコミットID]

 

を使用します。

 

たとえば、1つ前のコミットのHEAD@{1}に戻したい場合には、

 

$ git reset --hard HEAD@{1}

 

とすることで、その時点のコミットに戻すことができます。

 

--hardの部分はオプションですが、種類としては、

 

--hard:コミット、ワーキングエリア、ワーキングツリーとも取り消される

--mixed:コミット、ステージングエリアが取り消される(ワ-キングツリーはそのまま)

--soft:コミットする直前に戻る(ワ-キングツリー、ステージングエリアはそのまま)

 

があります。

 

「git reset」はコミット履歴には残らないため、リモートリポジトリに「git push」して既に公開しているものに対して行うと、存在するはずのコミットがなくなって不整合が生じ他のメンバーなどがコミットできなくなってしまいます。

 

そのため、できるだけ「git push」前のローカル側にある時に使うようにします。

 

3.誤ってリセットした時の対処方法

 

また、誤って、「git reset」してしまった時は、「git reset」で元に戻すことができます。

 

まずは、「git reflog」で過去のコミット履歴を確認します。

 

$ git reflog
1f3c187 HEAD@{0}: reset: moving to 1f3c187
3a6e528 HEAD@{1}: commit: second commit
27d5a20 HEAD@{2}: commit: first commit

 

戻したい履歴の場所を確認して「git reset」を再度実行します。

 

$ git reset --hard HEAD@{1}

 

これによって、HEAD@{0}のresetの前に戻すことができます。

 

4.コミットを戻すもう1つの方法

 

もう1つ元に戻す方法としては、「git revert」というものがあります。

こちらはgitに履歴が残るため「git push」した後でも使えます。

 

$ git revert [リセットしたいコミットID]

 

コミットIDの確認には、「git log」も使用します。

 

以上がコミット履歴の確認とコミットを元に戻す方法になります。

 

 

また、Git、GitHubについてのインストール、設定やいろいろなやり方についてこれまで記載してきた記事を一覧として以下にまとめましたのでよかったらご参照ください。

 

kuku81kuku81.hatenablog.com

 

 

わかりやすい本を手元に置いて読みながらやっていきたいという方には以下に初心者、初級者へのおすすめの入門書を記載していますのでよかったら参考にしてください。

 

kuku81kuku81.hatenablog.com

 

 

 

 

 

関連記事:

【Git】Gitのダウンロード、インストール方法 - Django Girls and Boys 備忘録

 

【Git】付属ツールGit Bashについて、起動方法 - Django Girls and Boys 備忘録

 

【Git】Git Bashのホームディレクトリ変更方法 - Django Girls and Boys 備忘録

 

【Git GitHub】初心者、初級者におすすめの入門書 - Django Girls and Boys 備忘録

 

【Python Django】git init について - Django Girls and Boys 備忘録

 

【Git】ユーザー名とメールアドレスの設定方法 - Django Girls and Boys 備忘録

 

【Git】git addとステージングエリア(インデックス)への登録について - Django Girls and Boys 備忘録

 

【Git】git commitとローカルリポジトリへの登録、gitの概略イメージ - Django Girls and Boys 備忘録

 

【Git】git diffによる差分確認について - Django Girls and Boys 備忘録

 

【Git GitHub】GitHubのアカウント作成方法 - Django Girls and Boys 備忘録

 

【Git GitHub】公開鍵の設定方法 - Django Girls and Boys 備忘録

 

【Git GitHub】Gitのダウンロード、インストールから「git add」、「git commit」によるGitへの登録までの一通りの方法 - Django Girls and Boys 備忘録

 

【Git GitHub】「git add」、「git commit」後の「git push」について、リモートリポジトリにプッシュする方法 - Django Girls and Boys 備忘録

 

【Git GitHub】プルリクエストとマージを実行する方法 - Django Girls and Boys 備忘録

 

【Git GitHub】リモートリポジトリをクローンする方法 - Django Girls and Boys 備忘録

 

【Git GitHub】プルリクエスト実施後にThere isn’t anything to compare. master and update_branch are entirely different commit histories.が出た時の対応方法 - Django Girls and Boys 備忘録

 

【Git GitHub】コミット履歴の確認とコミットを元に戻す方法 - Django Girls and Boys 備忘録

 

【Git GitHub】Git、GitHubのダウンロード、インストール、「git add」、「git commit」によるGitへの登録と「git push」、マージによるGitHubのmasterへの反映とクローンまでの一通りの方法 - Django Girls and Boys 備忘録

 

【Django】マイグレーション実行時に「sqlite3.OperationalError: table "**********" already exists」のようなエラーが出た時の対処方法 - Django Girls and Boys 備忘録

 

【Django】Djangoでのhtml(javascript)側からpython(views.py)側へ値を送る時の方法の一例 - Django Girls and Boys 備忘録