マージを元に戻すために使用できます。git revert
これを行うと、将来の「再マージ」がより困難になることに注意してください。あなたが密接にリンクしたそのメッセージを読んでください - それは将来の「再マージ」を機能させる方法について多くを述べています - しかし、それはdevelop
へのマージについて話していることに注意してmaster
ください.master
develop
A -- B -- C -- D -- E <-- master
\ \
F - G - H - M <-- develop
この場合 (逆ではなく にマージmaster
した場合develop
)、多くの異なるオプションを選択できますが、すべてに長所と短所があります...
オプションである場合、私が好む最も簡単な方法
(0) 何もしない。マージしてもブランチが壊れない場合C
はD
、develop
そのままにしておいてください。後で、誰かがこれgit checkout master
を取得します(最初にもう1つのコミットが追加されたとしgit merge --no-ff develop
ましょう):I
develop
A -- B -- C -- D -- E -- M2 <-- master
\ \ /
F - G - H - M - I <-- develop
であったから分離されて以来、 でmerge
行われたことを次に示します。したがって、 、、およびを入れて、外れた部分 (おそらくすべて) をスキップし、最後に入れてマージコミットを行います( commit のため; しかし、そこになかった場合は、私も使用したためです) .develop
master
B
F
G
H
M
master
I
M2
E
E
--no-ff
明らかな欠点があるいくつかの簡単な方法
(1)「履歴を書き換える」だけです:M
ブランチからコミットを消去しdevelop
ます。ブランチを使用する他のすべての人に、これが起ころうとしていることを警告してM
ください: そのコミットはなくなり、これに対処するために必要なあらゆる手段を講じる必要があります。
(2) 古い名前の使用をやめdevelop
、新しいブランチ名develop1
などを作成します。
A -- B -- C -- D -- E <-- master
| \
| M <-- develop
\ /
F - G - H <-- develop1
これはオプション (1) と同じですが、コミットM
はブランチ ラベルと共にまだそこにあり、 commit を指す新しい/異なるブランチ ラベルがありますH
。全員に警告する必要はありますが、作業が容易になる可能性があります。develop
後で削除することもできます。
元に戻すとその欠点
(3) マージを元に戻します。W
リンクされた記事のように、新しい復帰コミットを表すために使用しましょう。
A -- B -- C -- D -- E <-- master
\ \
F - G - H - M - W <-- develop
何が入っていW
ますか?マージの「効果を消去」するために必要なものは何でも。C
この場合、これは、およびで行われたことを元に戻す変更を意味しD
ます。これまでのところ、 、、およびdevelop
からの変更点が再びあります。問題は後で発生します。F
G
H
git checkout master
git merge develop
master
2 番目のコマンドは、とが分割された場所を探すためにルート検索を行いますdevelop
(つまり、 commit B
)。これにより、それ以降のすべての変更が取得されます。この時点で に含まれているものはW
、元に戻すC
とD
であり、望んでいたものとはまったく異なります。C
後で修正できますが、マージを行う人は誰でも、この「削除とD
」時限爆弾が待っていることを知っておく必要があります。
これは、「何もしない」オプション (0) と同じマージであることに注意してください。ここでの問題は の内容ですW
。(0) の場合は commit の内容が必要ですI
が、ここでは の内容は必要ありませんW
。
もう1つのオプション
上記の内容を考えると、これは間違いなく最悪のオプションですが、とにかくリストします。
(4)保持したいコミットのコピーを含むまったく新しいブランチを作成し、名前を付けますdevelop
。(または、別の名前を付けますが、develop1
上記のような状況に戻るので、おそらくそのような状況を使用する必要があります。)old-develop
ブランチを保持するか、(ラベルを付けずに) 放棄するかは、次第です。あなたですが、私はそれを描きます:
F' - G' - H' <-- develop
/
A -- B -- C -- D -- E <-- master
\ \
F - G - H - M <-- old-develop
これは、あなたが含めたリンクで説明されています。より複雑な場合にのみ本当に役立ちます。