5

社内で GIT を使用することにしましたが、問題が発生しました。さまざまな機能を持つ複数のブランチがあります。次に必要なのは、そのブランチをマージしてマスターにプッシュすることです。autoreplace を使用してこれを行うにはどうすればよいでしょうか - ブランチ a、ブランチ b、ブランチ c があります - それらすべてをマスターで取得する必要がありますが、ファイルが繰り返される場合、ブランチ b はメジャー、ブランチ c - マイナーである必要があります。

更新:

ブランチ-a:
-file1
-file2
-file3
-file4


ブランチ-b:
-file1
-file5
-file6


ブランチ-c:
-file1
-file2
-file7
-file8

結果として必要なもの:

主人:
-file1 (b から)
-file2 (a から)
-file3 (a から)
-file4 (a から)
-file5 (b から)
-file6 (b から)
-file7 (c から)
-file8 (c から)
4

3 に答える 3

11

タコのマージを実行し、コミットしないでください'--no-commit'。マスターから

git merge --no-commit branch-a branch-b branch-c

競合を解決し、必要に応じて、特定のバージョンのファイルを取得してコミットします。

git checkout branch-b -- file3

他の特定のファイルについても繰り返します。

git add . -A
git commit

これは、カスタムワークフローが機能する方法です。

お役に立てれば。

于 2011-03-16T19:41:29.393 に答える
2

私はこれをテストしていませんが、これはあなたが望むことをするかもしれません:

git checkout master
git merge -s recursive -X theirs branch-c
git merge -s recursive -X theirs branch-a
git merge -s recursive -X theirs branch-b

これはrecursiveマージ戦略を使用していますが、マージ時に競合がある場合は、現在のブランチにマージしているブランチを優先して常に競合を解決するように言っています。このためのドキュメントを見つけるには、git mergeのマニュアルページにある再帰的マージ戦略のセクションと、その戦略のoursおよびtheirsオプションを参照してください。

これに伴う問題は、各ブランチのファイルに加えた変更が競合しない場合、一方のブランチともう一方のブランチからの変更の一部が発生することです。それがあなたの望むものではない場合(そして私はそもそもあなたのワークフローを完全に理解していないことを認めます)、あなたは例えば:

git merge --no-commit branch-c

...次に、マージコミットをコミットする前に、必要な各ファイルバージョンでインデックスを手動で更新します。そのコマンドを実行した後、次のように両方のブランチに存在するすべてのファイルを見つけることができます。

comm -1 -2 <(git ls-tree -r --name-only master|sort) <(git ls-tree -r --name-only branch-c|sort) > common.txt

...次にbranch-c、それぞれのバージョンを次のように選択します。

xargs -n 1 git checkout branch-c -- < common.txt

...そしてgit commitいつものようにコミットします。

繰り返しになりますが、私はこれを絶対にやりたくないと確信しています-gitのデフォルトのマージ動作は、ほとんどの場合、私が望むことを実行し、解決するために本物の競合を残すだけです。

于 2011-03-16T15:40:10.627 に答える
0

ファイルのコピー - 簡単な代替手段

これを行う 1 つの方法は、master ブランチをチェックアウトすることです。別のリポジトリで、マイナー ブランチ ファイルとメジャー ブランチ ファイルをチェックアウトします。マイナー ファイルをコピーしてからメジャー ファイルをコピーし、メジャー ファイルがマイナー ファイルを上書きするようにします。次に、結果をコミットします。

ファイル コピーを使用すると、(必要に応じて) メジャー ファイルでマイナー ファイルを上書きするかどうかをケースバイケースで判断できます。優れたファイル コピー プログラムを使用すると、ファイルの日付とファイル サイズがわかります。また、十分な情報に基づいた決定を下すのに役立つプレビューも表示される場合があります。

これは、特定のケースでは最善の方法ではない可能性があります。ツールボックスの追加ツールとして扱ってください。もちろん、単に上書きするのではなく、マージしたい場合は、kdiff3 などのマージツールと一緒に使用できるgitを使用することをお勧めします。

于 2016-07-19T10:07:40.523 に答える