2016-09-21 25 views
0

私は、ステージングと生産のためのmaster branchためdev branchを持っています。ステージングでは多くの作業が行われましたが、今は生産に移行する必要があります。プロダクションではまだリリースしたくない機能がありますが、すでにマスタリングとマージのプルリクエストに含まれています。私はどちらかこれらのしたい"git pull"して特定のコミットを無視できますか?

  1. 新しいブランチを作成し、マスターブランチまでの生産にそのブランチをコミットし、設定を削除するステージングを使用するには、先に行くとにgit pullすべて
  2. 準備ができています私がまだ望んでいないものを訴えて、その地元のレポにその機能を持っているコミットを「削除」するよう伝えてください。

私はgit revert <commit #>を試しましたが、それは私がまだ取り組んでいるステージングでいくつかの安定性の問題を引き起こしました。

+0

あなたは機能がすでにdev' 'にマージされていることを意味しますか? –

答えて

1

私は「gitのプル」と具体的なコミットを無視することはできますか?

私は生産にまだリリースしたくないけど、それはすでにマスターするプルリクエストに含まれており、マージされた機能があります。

Gitのワークフローガイダンスでは、リリース準備が整うまで、masterにマージしないことが一般的に示されています。その船が出航していますので

、私はこれらのオプションを検討します:

  1. が進行中の機能がmasterに残って、それは準備ができてまで生産で無効にすることができるようにfeature toggleを実装します。

  2. 進行中の機能は新しいリリースブランチを構築するための出発点として、合併前から新しいブランチを作成します。 、あなたもそれ以来、マージされた機能をリリースしたいと仮定することができますあなたの新しい支店、または特定のコミットの桜ピックへのいずれかmergeその機能ブランチ。

  3. masterから新しいブランチを作成し、revertを使用して、進行中の機能の一部であるコミットを解放します。

あなたは既に発見したとして、あなたがお互いから分離された機能を維持するのは特に良い仕事をしていない限り、オプション2と3は、むしろ退屈でエラーを起こしやすいことを行っています。進行中の機能を除去したアプリの個別のバージョンを用意するのではなく、私は、そう、あなたができるオプション1.

+0

申し訳ありませんが、私は "私はgit pull"して特定のコミットを無視できますか?私は完全な 'git pull'をやって、私が望んでいないカップルのコミットだけを削除することを考えていました。私が推測するのは、元に戻すことです。 – dcp3450

1

まあに向かってあなたを促すだろうが、これは新しいブランチを作成することに似ています。

ちょうどその時あなたがコミットを確認するためにgit log origin/masterを使用して、あなたがしたいだけコミットを取るためにgit merge <sha>git cherry-pick <sha>の両方を使用することができ、オブジェクトを取得するにはgit fetchを使用しています。あなたがこれをやって始めると、あなたの歴史はorigin/masterから発散するので、これは基本的に分岐していることに注意してください。


はマージ相をより明確にするには、次の場合には、

A - B - C - D - E - F - G - H - I 

今:リモート・マスター・ブランチで

A - B - C 

はあなたの地元のmasterブランチに持っていると仮定しますあなたが望むDEFH、実行:

コミットが小さくなるほど、コミットはより簡単になります。 これは最終的にあなたを残します:H'は異なるが、(異なるSHA-1)が、同様の内容でHからコミットされ

A - B - C - D - E - F - H' 

もちろん、ここでの文字はそれぞれのsha-1合計を表します。前述のようにgit log origin/masterで識別できます。本当に唯一git fetch origin; git merge origin/mastergit pull行う

  • (リモートと仮定するとoriginと呼ばれるが、そしてあなたのブランチはmasterです):


    あなたは物事のカップルを注意してください。

  • 上記の例では、H 'は異なるコミットです(親が異なるためsha-1の合計が異なります)。チェリーピックを使用し始めると、「代替タイムライン」が作成されます。
  • 上記の点から、git merge(たとえば、あなたがHに興味がない)だけを使用している場合は、履歴は変更されないことに注意してください。直接(ちょうどあなたのローカルブランチを早送り)競合せずにバックGHI後でマージする。
+0

私は、 'tempMaster'という名前のブランチを作成して、あなたの提案を行い、その後(すべての行がバックアップされたとき)マスターに戻ることができますか? – dcp3450

+0

はい、私はそれが最善の方法だと思います。それ以外の場合は、ローカルの 'master'ブランチを強制的にプルまたは削除する必要があります。どちらの場合でも、すぐに機能が準備されることを願っています。 – MayeulC

+0

これはまれですが、機能承認を待っています。 'git merge'と' git cherry-pick'を一緒に使って私の望む結果を得る方法を研究します。 – dcp3450

関連する問題