チェックアウト--ours
とを使用してすべてのファイルの競合を解決する方法はあります--theirs
か?私はあなたが個々のファイルに対してそれをすることができることを知っています、しかしすべてのためにそれをする方法を見つけることができませんでした。
チェックアウト--ours
とを使用してすべてのファイルの競合を解決する方法はあります--theirs
か?私はあなたが個々のファイルに対してそれをすることができることを知っています、しかしすべてのためにそれをする方法を見つけることができませんでした。
回答:
作業ディレクトリをgrepし、xargsコマンドで出力を送信するだけです。
grep -lr '<<<<<<<' . | xargs git checkout --ours
または
grep -lr '<<<<<<<' . | xargs git checkout --theirs
これがどのように機能するか:競合マーカー(文字列 '<<<<<<<')を探してgrep
、現在のディレクトリ(.
)およびサブディレクトリ(-r
フラグ)内のすべてのファイルを再帰的に検索します
-l
または--files-with-matches
フラグを出力する文字列が見つかったファイル名のみをgrepの原因となります。スキャンは最初の一致後に停止するため、一致した各ファイルは1回だけ出力されます。
マッチしたファイル名が、その後されているパイプにxargsのために、個々の引数に、パイプで連結された入力ストリームアップそれは休憩ユーティリティgit checkout --ours
または--theirs
このリンクの詳細。
これをコマンドラインで毎回入力する必要があるのは非常に不便なので、頻繁に使用している場合は、選択したシェルのエイリアスを作成することは悪くないかもしれません。Bashが通常のものです。
この方法は、少なくともGitバージョン2.4.xで機能するはずです。
git diff --name-only --diff-filter=U
。
git status | grep both | awk '{print $3}' | xargs git checkout --[theirs|ours]
。大規模なプロジェクトの場合は、greppingよりも高速です。
CONFLICT (rename/rename): Rename "a.txt"->"c.txt" in branch "HEAD" rename "a.txt"->"b.txt" in "master"
git status --porcelain | egrep '^UU' | cut -d ' ' -f 2 |xargs git checkout --[theirs|ours]
。
次のことができ-Xours
たり-Xtheirs
とgit merge
同様。そう:
git reset --hard HEAD
)git merge -Xours
またはgit merge -Xtheirs
)免責事項:もちろん、1つだけオプションを選択できます。-Xours
または-Xtheirs
、ファイルごとに異なる戦略を使用する必要があります。
のための方法があるかどうかはわかりませんが、checkout
正直に言ってそれが非常に役立つとは思いません。ファイルごとに異なるソリューションが必要な場合は、checkoutコマンドで戦略を選択すると便利です。
--theirs
か--ours
-Optionのgit v1.9.4へ。アプローチはでしょうgit merge -s recursive -Xtheirs BRANCH
。
--theirs
また--ours
、gitでは使用できません2.2.0
。私の答えは正確ではなかったか、古いgitバージョンで利用可能でした(この答えはITエポックではかなり古い)。右のアプローチがです-X
。私はそれに応じて更新します
git checkout --[ours/theirs] .
あなたがすべての紛争の根源にいる限り、あなたが望むことをします。私たち/彼らはマージされていないファイルにのみ影響するので、grep / find / etcの競合を明確に行う必要はありません。
error: path 'foo/bar/blah' does not have our version
。
git diff --name-only --diff-filter=U | xargs git checkout --theirs
仕事をするようです。これを行うには、gitリポジトリのルートディレクトリにcdする必要があることに注意してください。
他の誰かが1つのブランチ(マスターなど)のすべてを別のブランチのコンテンツで単純に上書きしたい場合、より簡単な方法があります。
git merge origin/master --strategy=ours
のおかげで https://stackoverflow.com/a/1295232/560114の
またはその逆については、「theirs」バージョンの「git merge -s ours」はありますか?を参照してください。
git checkout --ours -- .
作品?これ.
は、作業ディレクトリのルートから適用した場合の現在のディレクトリを意味するため、基本的には作業ディレクトリ全体を意味します。--ours
フラグで動作するかどうかはわかりませんが、削除または名前が変更されたファイルの競合をどのように処理するかはわかりません。