git pullの取り消し方法をケース別に紹介

エンジニア
エンジニア

・git pull取り消したい

・色々な方法があってどれを実行したらいいかわからない

こういったご要望・お悩みを持った方向けの記事になっています。

エンジニアの方ならおそらくほぼ全員は使ったことがあるであろう「Git」。

しかし、駆け出しの頃やGitを使いはじめの頃は思った通りの動きに困って解決のために時間がかかってしまいます。

git pull」の取り消しもその1つです。

ケースによって取り消しの方法が変わってくるのでそれも含めてわかりやすく解説していきます。

git pull の取り消し方法

それでは早速git pull の取り消し方法を紹介していきます。

まずはケースによって取り消し方法が異なるのでそのケースを紹介します。

ケースは大きく2つあります。

・git pull が成功しているケース

・コンフリクトが起きてgit pull が失敗しているケース

こちらがその2ケースになります。

git pull が成功しているケース

まずはgit pull が成功しているケースから解説していきます。

git pull が成功した場合、以下のコマンド自動的に実行→成功しています。

  1. git fetch
  2. git merge FETCH_HEAD

簡単に説明すると、「git fetch」でリモートにある対象のブランチの状態をローカルに同期させます。

その状態が「FETCH_HEAD」に書き込まれており、それをmergeしているという状態です。

つまりmergeをしたことにより、参照(HEAD)が今の状態から1つ進んだということになります。

「git reflog」というコマンドを打つと、それが良く分かります。

ebc9076 (HEAD -> home) HEAD@{0}: pull origin main: Merge made by the 'ort' strategy.
a9fa9e1 HEAD@{1}: checkout: moving from main to home
3f19a96 (origin/main, main) HEAD@{2}: commit: test

このコマンドは参照(HEAD)の移動履歴を確認することができます。

これをみてみると「HEAD@{0}」がmergeした後の状態、「HEAD@{1}」がmerge前の状態ということが分かります。

よって「HEAD@{1}」の状態に強制的に戻してあげます。

コマンドは以下になります。

git reset --hard HEAD@{1}

git reset」はgit の取り消しに使うコマンドです。

オプション「–hard」で強制的にインデックスと作業ツリーが取り消されます。

git reset」についてはこちらの記事がとても分かりやすく解説されていて理解がしやすかったです。

git reset の使い方と、主要オプション

これでpull する前の状態に戻すことに成功しました。

コンフリクトが起きてgit pull が失敗しているケース

続いてはコンフリクトが起きてgit pull が失敗しているケースについてです。

先ほどとは違い、コンフリクトが起きるとこのような表示になるかと思います。

 * branch            main       -> FETCH_HEAD
Auto-merging src/index.php
CONFLICT (content): Merge conflict in src/index.php
Automatic merge failed; fix conflicts and then commit the result.

このように、mergeが失敗したからコンフリクトを解消してねとメッセージが出ています。

VScodeを使用している方などはこのような表示になっている場合はコンフリクトが起こっています。

git pull が失敗してVS codeでのコンフリクトが起こったサンプル画像

このような場合に取り消す場合には以下のコマンドを使用します。

git merge --abort

要は「mergeを中止してね」というコマンドです。

このコマンドを打つとpullを使用とする前の状態に戻されます。

git merge –abort」でエラーが起きて実行できない場合は、pullを行う際にmergeではなくrebaseを使うように設定されているかと思いますので以下のコマンドで実行できるかと思います。

git rebase --abort

git mergeの選択肢が大きく2種類あり、設定により「merge」か「rebase」になっているのでそれに合わせて「–abort」コマンドを実行する必要があります。

pull時のmergeの選択肢についてはこちらのQiitaの記事が図解も含めてとても分かりやすく解説されていました。

Git 2.27 での git pull 時の warning について

git pull を取り消したいときはケース別に対応しよう

いかがだったでしょうか。

git pull してとりあえず前の状態に戻したいといったことはよく起きます。

正常に行われた場合と失敗に終わった場合で対応方法が違うので覚えておくと良いです。

間違ってgit pull をしてしまった時も、焦らず対応しましょう。

同じカテゴリーの新着記事

カテゴリー情報が取得できませんでした。

Recruit

Contact