4

だから、私はこれを使ってきましたがgit cherry-pick、面倒になってきており、もっと簡単な方法(または別のアプローチ)があるかどうか知りたいと思っていました.

3 つのブランチがあるとします: master(安定版、本番用の候補)、develop(ワーキング ブランチ)、およびproduction.

現在、安定したマイルストーンに加えproductionて、いくつかの製品固有の設定があります。マージするたびに変更したくないもの。単純に にマージしてから にマージしたり、develop直接にマージしたりすることはできません。これは、プロダクション設定との競合が発生するためです。mastermasterproductiondevelopproduction

これまでのところ発行は機能git cherry-pick commitA^..commitBproductionていますが、毎回これを続けたくありません。

明らかな何かが欠けていますか?単一のブランチのコミットだけをマージする簡単な方法はありますか?

4

2 に答える 2

3

開発環境と本番環境で別々の設定ファイルを使用することを検討してください

cherry-pick通常、特定のコミットのみを一連の開発にマージするための最良かつ最も簡単なオプションです。通常のコマンドを使用する代わりに、cherry-pick開発ブランチから/release ブランチに常にコミットする必要がある場合は、設定ファイルのオーバーライドを回避するために、いくつかによって生成された設定ファイルの運用、デプロイされたバージョンを検討することをお勧めします。展開中のスクリプトの種類、および/または開発環境と本番環境用の個別の設定ファイル (および.mastermergedev.settingsproduction.settings

の代替cherry-pick

またはパッチをcherry-pick使用して同じ効果を達成することもできますが、単一のコミットを選択しようとしているだけで、パッチを使用するとより多くの手順が必要な場合は、使用するのが面倒になる可能性があります。rebase --ontorebase --onto

rebasevscherry-pick単一のコミットを選択する

と比べて面倒な場合がある例としてrebase --onto、ブランチcherry-pickに次のコミットがあるとします。develop

               develop
A <- B <- C <- D

ブランチにマージCしたいだけだとしましょう。masterを使用cherry-pickすると、これを使用するだけです ( がオンの場合master)

git cherry-pick C

ただし、コミットを 1 つだけ選択するにrebase --ontoは、次のようにする必要があります。

git rebase --onto master B C

master上記では、 の現在の位置をの新しいベース コミット/親として使用したいということでCありB、古いベース/親です。

rebasevscherry-pickコミットの範囲を選択する

ただし、コミットの範囲の選択は、2 つのコマンド間で非常に似ています。たとえば、 と の両方をマージするBとしCます。それで

git cherry-pick A..C
git rebase --onto master A C

がチェックアウトさcherry-pickれている間に行う必要がありますが、そうではありません。masterrebase --ontomaster

パッチの使用

パッチを使用するとさらに多くの作業が必要になることを確認したい場合は、Pro Git bookでパッチの使用について読むことができます。

于 2013-05-26T16:09:20.107 に答える
3

Git Attributesを見る必要があるように思えます。.gitattributes次のような行を含むファイルを作成します。

settingsfile merge=ours

これsettingsfileにより、 がマージによって上書きされるのを防ぎます。競合する代わりに、これはファイルの現在の状態を受け入れることにより、暗黙のうちにマージを解決します。

詳細については、カスタム マージ ドライバーの作成方法に関するこの回答を参照してください。

于 2013-05-26T15:19:51.057 に答える