質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Q&A

解決済

2回答

3323閲覧

gitでマージ後のプッシュを戻したい

mno

総合スコア35

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

0グッド

0クリップ

投稿2019/04/04 13:33

お世話になっております。
gitで、1つのプロジェクトに複数のブランチがあります。
例えば以下のような流れで作業していました。


├─ブランチX       → X1コミット →     → X2コミット →      X3コミット
│               ↓            ↓
│               X1マージ         X2マージ
│               ↓            ↓
└─ブランチY → Y1コミット → X1マージ → Y2コミット → X2マージ → Y3コミット

ブランチYはブランチXのカスタマイズ版で、Xに対して追加機能があるものです。
XでのバグはYにも反映されます。
ブランチX、Yともにリモートブランチにプッシュされています。

上記の時点(A)で、
ブランチXには、X1、X2、X3の改修がコミット/プッシュされています。
ブランチYには、Y1、X1、Y2、X2、Y3の改修がコミット/プッシュされています。

ここで、X3の改修をブランチYにマージしようとしました。
しかし、操作ミスにより、ブランチY→ブランチXにマージしてしまい、なおかつ
リモートブランチにプッシュしてしまいました。

これにより、この時点(B)で
ブランチXには、Y1、X1、Y2、X2、Y3、X3の改修がコミット/プッシュされています。
プッシュ済みのため、revertやresetを行っても状況が変わりません。

このブランチXを、時点(A)に戻したいです。
上記は例のため、実際の差分はもっと多くあり、時系列的にXとYの改修は混在します。
簡単に戻す方法があればご教示いただけないでしょうか。
使用しているツールは、TortoiseGit、VisualStudioのgitです。
(今回は、たまたまバックアップがあったため、そこから復元しました)

また、現在の運用ではX→Yがあっても、Y→Xは無いです。
マージの方向を一方通行にするような方法があればご教示いただけないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。

ブランチXの位置をX3に戻したいだけと理解しました。
ブランチXにcheckoutした状態でgit reset --hard <X3>を実行し、そのままgit push -fで直るはずです。
前者のコマンドは「ブランチXの状態をX3に戻す」もので、後者は「戻す操作を強制的にpushする」コマンドです。
当然ですが、この操作はコミット履歴の破壊に相当するので、チームメンバーに対してどのような操作をするのか予め周知しておき、不整合を起こさないように注意する必要があります。

投稿2019/04/05 00:32

tamoto

総合スコア4103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mno

2019/04/05 03:43

説明不足て申し訳ごさいません。 ブランチXにマージされてしまったY1Y2Y3を抜きたい がやりたいことです。
tamoto

2019/04/05 04:35

Xの位置をX3まで戻せばY1Y2Y3がマージされる前の状態になると思うんですけど、それは意味が違うのでしょうか?
guest

0

ベストアンサー

プッシュ済みのため、revertやresetを行っても状況が変わりません。

push 済みであっても revert や reset は可能かと思います。
これについては、類似の質問がありましたので、リンクを貼っておきます。

git mergeのやり直してについて教えてください
https://teratail.com/questions/73154

もし上記の方法が使えないのであれば、マージ前のコミット番号を指定して checkout し、別のブランチを作るという手もあります。

マージの方向を一方通行にするような方法があればご教示いただけないでしょうか。

このような方法は聞いたことがありませんが、一般的には master リポジトリに Push 権限を設定してミスを防ぐ運用をしていると思います。(管理者がミスした場合はどうしようもありませんが・・・)

投稿2019/04/04 23:14

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mno

2019/04/05 03:46

ありがとうございます。 ご教示いただいた方法を確認してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問