2017-05-18 14 views
0

GitHubフローを使用する予定ですが、質問があります。Github Flow削除コミットと履歴の変更

マイレポ(A、B、C、Dは、プル要求にマージからのコミットをマージしている)

(マスタ)------------- A ----- -B------ C ------- D(HEAD)

私がBでコミットしたものには欠陥がありますが、CとDを含むデプロイメントを行う必要があります。配備後までBを取り除いて元に戻しますか?

答えて

2

git revert B -m 1では、PRブランチでマージすることによって導入した変更を元に戻す新しいコミットを作成します。後で同じことをやり直すことはできますが、復帰コマンドを元に戻して戻すことができます。 -m 1パラメータは、元に戻すマージコミットがないため、必要ありません。

+0

このようにBを元に戻すと、変更がC&Dに反映されますか?何がBで変更され、その後CまたはDで変更されましたか? – Tom

+1

元に戻すと、元に戻すコミットで行われた処理が元に戻されます。あなたはまだ履​​歴にマージされ、CとDは触れられません。 CまたはDで同じコードを変更した場合は、解決する必要がある競合が発生します。 – Vampire

1

いくつかのオプションがあります。私は、復帰が最良の選択肢であることを示唆しています。人々は結果の歴史を嫌う傾向がありますが、彼らは実用的な懸念に先立って審美的感覚を置いています。だから、あなたはあなたはそれとしてそれをテストする必要があり

A -- C -- D <--(master) 

と同じツリーを生成

A -- B -- C -- D -- ~B <--(master) 

を得るでしょうあなたは

git revert B 

を行う場合

A -- B -- C -- D <--(master) 

を持っています木の新しい状態です。そして、あなたはその変更

A -- B -- C -- D -- ~B -- ~~B <--(master) 

を与える

git revert ~B 

を再作成(~~BBと同じ変更を行う場合)、その後、あなたの修正を行いたいBを修正する

。あなたは(B+Bから修正変更を適用される場合)

A -- B -- C -- D -- ~B -- B+ <--(master) 

で終了するように、私は--amendを使用して変更を適用します。

変更の完了を確認してから元に戻してからやり直してください。私はこれがちょっと傲慢だと思うが(有用なものではない)、ねえ、あなたが本当に望むなら、私が言うような選択肢がある。

代わりにリベースすることができます。これは明らかにプッシュされた変更ですので、彼らはgit rebaseドキュメント(https://git-scm.com/docs/git-rebase

git rebase --interactive A master 
で「上流リベースからの回復」に記載されている手順を実行する必要がありますように、あなたは、開発者のすべてを調整する必要があります

TODOリストを編集します。これを行うにはいくつかの方法がありますが、最後にBを移動して修正を受け取る準備が整ったとしましょう。文字通り、Bの行をリストの最後に移動してください。今、あなたは( - すなわち、異なる親x'は同じことを行いますが異なる「ベース」のxの書き直したものです)

A -- C' -- D' -- B' <--(master) 

を持っています。

もちろん、master^(現在はB'を省略)が必要です。より良いテスト(新しいコード状態です)。それでは、強制的にプッシュする必要があります

git push -f master^:master 

他の方法もありますが、これらは主なオプションをカバーしています。

関連する問題