2016-11-15 5 views
1

私はgitを使用しており、プルリクエスト後にブランチをマスターにマージしています。git merge:どのようにファイルのマスターバージョンを保持しますか?

私の理解では、最後の共通祖先から変更されていないが、ブランチ内の同じファイルがあった場合、gitはマージ中にブランチ内のバージョンを使用します。

2つのブランチの違いのほとんどは、私が望むような動作ですが、マスターバージョンを保持してブランチバージョンを破棄する1つのサブディレクトリツリーにいくつかのファイルがあります。

これを実行するためのコマンドラインベースのワークフローは何ですか?

+0

これは、マージよりもチェリーピッキングに似ています。 – Melebius

+0

おそらく、最もきれいな解決策は、あなたの欲望を満たすために彼のコミットを修正するためにプルリクエストを提出した人を取得することでしょう。 – Joost

答えて

3

最も簡単な選択肢は、git merge --no-commit --no-ffを使用してすべてをマージし、すべてがコミットされる前に最後のステップで停止することです。その後、あなたはそれらを維持する必要があるファイルをリセット/チェックアウトし、を実行します。 masterにマージしたくない変更を加えるときはいつでもそうする必要があります。このアプローチのリスクは、いくつかのdiffs /ファイルを忘れる可能性があり、明白な理由なしに同僚のリポジトリに残ることです。

もう少し複雑な別のオプションは、2つのブランチを作成することです。testsfeaturesと呼ぶことにします。 featuresブランチには、masterにマージする変更が含まれ、ブランチtestsにはその他の変更が含まれています。したがって、featuresmastertestsの両方にマージしてください。これにより、上記のリスクが排除され、これが最良の選択肢になります。

第3の選択肢は、マージを維持し、変更したくないものを元に戻すコミットを行うことです。これにより、同僚があなたの貢献を理解することが難しくなります。

0

私は多くの方法があると思います。私は何になります

  1. はマージを実行あなたのマージがコミットされます
  2. 編集(別名修正)最後のコミット((早送り--no-FFスイッチ付きではありません確認してください) )
  3. unstageあなたは
  4. を「リセット」したいファイルを変更し、ファイル内の)新しいマージファイルなしでコミットされる(コミット
  5. リセット変更を行います。

もう1つの方法は、マージ後に(可能であれば)ファイルに触れていたすべてのコミットを元に戻すことです。

関連する問題