6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

作業中ブランチで間違ってpullしてしまった場合の対応

Posted at

はじめに

ローカルで機能開発中に、最新のリモートブランチの動作確認をしようと、git pull をしました。
しかし、develop ブランチに切り替えるのを忘れており、作業中のブランチにpullしてしまったため、pullを取り消す方法についての備忘録です。

前提

  • branchAで作業中
  • まだコミットしていないファイルがある状態でpullしてしまった

対応方法

git pullgit fetch でリモートの最新状態のブランチを持ってきて、ローカルの現在いるブランチにマージするコマンドなので、pull してきたリモートブランチのマージを取り消しすればよいだけです。

つまりマージする前の位置にHEADを移動させればいいことになります。

1. HEADの移動履歴を確認

まずは、現在のHEADの位置を確認しましょう。

% git reflog

# 現在のHEADの位置
e6ec135b (HEAD -> feature/branchA) HEAD@{0}: pull origin HEAD: Merge made by the 'recursive' strategy.

# ここに戻したい
eea24d80 HEAD@{1}: commit: branchA での作業内容
d4352211 (develop) HEAD@{2}: checkout: moving from develop to branchA

これでマージ前のHEADの位置がHEAD@{1} で有ることがわかりました。

後はgit reset --hard を利用して、強制的にHEADを移動するだけです。
git reset --hard は、HEAD,作業ツリー、インデックスのすべてを指定したコミットに書き換えるコマンドになります。

注意点

ここで1つ注意しておくことは、現在のブランチで作業中の場合は、変更をコミットするか退避させておかないと、現在の作業内容が消えてしまうことです。

今回はgit stash を使って退避させる方法を取ります。

2. 作業中ブランチの変更を退避

現在branchAで作業中の内容を退避させます。
※今回はまだ修正中でコミットしたくないため、この方法を適用

git stash save "コメント" -u

3. git pullの取り消し

git reset --hard HEAD@{1}

これで上手くHEADの位置が元に戻っていれば完了です。

さいごに

間違えてしまっても焦らずに対処できるように、これからもどんどん気づいたことをかいていきます。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?