1. ホーム
  2. git

早送りのマージを元に戻す

2023-07-09 06:24:25

質問

git リポジトリにいくつか変更を加えてしまったのですが、元に戻したいです。

私の git repo はこのようなものでした。

A-B----     master
   \   /
    C-D     * develop

私は、その時 develop ブランチと異なることを忘れていました。 master ブランチと異なることを忘れていて develop ブランチに変更を加え、それを master にマージし、リモートにプッシュしました(名前は publish ).

masterではB(共通の祖先)以降の変更がなかったので、gitはfast-forward mergeを行いました。

さて、私のレポはこのようになりました。

A-B-C-D   master, develop, remotes/publish/master, remotes/publish/develop.

前回のマージを元に戻したかったので master をBに戻したいと思います。

を読んだ限りでは Git で最後のコミットを取り消すには? で、私は git reset sha-of-B を復元するために master ブランチをリビジョン B にリストアします。

質問です。

  • リストア方法 develop をリビジョン D に戻すにはどうしたらよいですか。
  • その後、これらの変更をリモート/パブリッシュに戻すにはどうすればよいですか?

どのように解決するのですか?

master ブランチをリセットすると、develop ブランチには触れなくなります。全て順番にreputするためには、以下のようにします。

git checkout master
git reset --hard sha-of-B
git checkout develop
git reset --hard sha-of-D
git checkout master
git merge develop --no-ff