2014-07-23 11 views
12

sagen, dass ich diese haben nach einer Zusammenführung versucht, und beim Betreten git status:Wie ‚git Kasse --theirs‘ für mehrere Dateien (oder alle unmerged-Dateien) tun

# 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 

... und ich weiß, ich will um dies für jede dieser Dateien zu tun:

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

... aber es gibt viele von ihnen. Wie könnte ich sie als Batch machen?

Antwort

13

Die Lösung für meinen Fall endete als einfach einen Platzhalter in dem Verzeichnispfad zu verwenden, da die Dateien gruppiert wurden:

git checkout --theirs directory_name/* 
git add directory_name/* 
0

Dieser überprüft alle unmerged Dateien aus, ohne das Verzeichnis zu spezifizieren:

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

Source

+0

Diese Antwort wäre besser mit einer Erklärung all dieser Argumente und Flaggen. – isherwood

2

Wenn Ihre Dateien sind tiefer als ein Verzeichnis (dh. es gibt Verzeichnisse) und Sie möchten al selektiv rekursiv wählen l their Dateien für ein Verzeichnis, verwenden Sie die folgenden Schritte aus:

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

(von this page)

+0

Dies funktioniert jedoch nicht, wenn Binärdateien vorhanden sind. –

0

können Sie die folgenden Befehle verwenden Multiples Dateien auf unmerged Weg zur Kasse

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

führen Sie die unten Befehl, um die obigen Dateien zu committen

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