web-dev-qa-db-ja.com

複数のファイル(またはマージされていないすべてのファイル)に対して「git checkout --theirs」を実行する方法

マージを試行し、git statusを入力した後、これがあるとします。

# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   added by them: myfile1.xhtml
#   added by them: myfile2.xhtml
#   added by them: myfile3.xhtml

...そして、私はこれらのファイルのそれぞれに対してこれをしたいことを知っています:

git checkout --theirs myfile1.xhtml
git add myfile1.xhtml

...しかし、それらの多くがあります。バッチとしてどのように行うことができますか?

25
isherwood

私の場合の解決策は、ファイルがグループ化されているため、ディレクトリパスでワイルドカードを使用することでした:

git checkout --theirs directory_name/*
git add directory_name/*
25
isherwood

以下のコマンドを使用して、マージされていないパス上の複数のファイルをチェックアウトできます

git checkout --theirs `git status | grep "added by them:" | awk '{print $NF}'`

以下のコマンドを実行して、上記のファイルをコミットします

git commit `git status | grep "added by them:" | awk '{print $NF}'`
4
Ondweb

ファイルが1つのディレクトリよりも深い(つまり、サブディレクトリがある)場合、ディレクトリのすべてのtheirファイルを選択的に再帰的に選択するには、次を使用します。

grep -lr '<<<<<<<' directory_name/ | xargs git checkout --theirs
git add directory_name/*

(from このページ

2
kris

これにより、ディレクトリを指定せずにすべてのマージされていないファイルがチェックアウトされます。

git ls-files --unmerged | Perl -n -e'/\t(.*)/ && print "$1\n"' | uniq | xargs -r git checkout --theirs --

ソース

0
fracz