1. ホーム
  2. git

[解決済み] まだプッシュされていない Git マージを元に戻す

2022-03-16 16:23:18

質問

masterブランチの中で、私は git merge some-other-branch ローカルで、しかしオリジンマスターに変更をプッシュすることはありませんでした。マージするつもりではなかったので、元に戻したいのですが。ローカルで git status というメッセージが表示されます。

# On branch master
# Your branch is ahead of 'origin/master' by 4 commits.

いくつかの を発見しました。 を実行してみました。

git revert HEAD -m 1

というメッセージが表示されましたが、今は git status :

# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.

自分のブランチが何コミット分も先に進んでしまうのは困ります。どうすれば元に戻せますか?

解決方法は?

git reflog どのコミットがマージ前のものかをチェックする ( git reflog よりも、より良い選択肢となるでしょう。 git log ). そして、それを使ってリセットすることができます。

git reset --hard commit_sha

また、別の方法もあります。

git reset --hard HEAD~1

1コミット分取り戻せます。

変更されたファイル、コミットされていないファイル、破棄されたファイルは、変更されていない状態にリセットされることに注意してください。 . それらを維持するには、変更を隠しておくか、あるいは --merge というオプションがあります。


以下の@Velmont氏の回答にあるように、この直接のケースでは、使用することです。

git reset --hard ORIG_HEAD

の方が、変更内容を保持できるため、良い結果が得られるかもしれません。 ORIG_HEAD は、マージが発生する前のコミットを直接指すので、自分で探す必要はありません。


さらなるヒントは --merge スイッチの代わりに --hard というのは、不必要にファイルをリセットすることがないからです。

git reset --merge ORIG_HEAD

-- マージ

インデックスをリセットし、作業ツリー内の <commit> と HEAD の間で異なるファイルを更新しますが、インデックスと作業ツリーの間で異なるファイル(つまり、追加されていない変更があるもの)は保持します。