Gibt es eine Möglichkeit, Konflikte für alle Dateien mithilfe von checkout --ours
und zu lösen --theirs
? Ich weiß, dass Sie es für einzelne Dateien tun können, aber keinen Weg finden, es für alle zu tun.
Gibt es eine Möglichkeit, Konflikte für alle Dateien mithilfe von checkout --ours
und zu lösen --theirs
? Ich weiß, dass Sie es für einzelne Dateien tun können, aber keinen Weg finden, es für alle zu tun.
Antworten:
Durchsuchen Sie einfach das Arbeitsverzeichnis und senden Sie die Ausgabe über den Befehl xargs:
grep -lr '<<<<<<<' . | xargs git checkout --ours
oder
grep -lr '<<<<<<<' . | xargs git checkout --theirs
So funktioniert das: grep
Durchsucht jede Datei im aktuellen Verzeichnis (the .
) und in den Unterverzeichnissen rekursiv (das -r
Flag) nach Konfliktmarkierungen (die Zeichenfolge '<<<<<<<').
Das Flag -l
oder --files-with-matches
bewirkt, dass grep nur den Dateinamen ausgibt, in dem die Zeichenfolge gefunden wurde. Der Scanvorgang wird nach dem ersten Abgleich beendet, sodass jede übereinstimmende Datei nur einmal ausgegeben wird.
Die angepaßten Dateinamen werden dann verrohrt zu Xargs , ein Dienstprogramm , das aufbricht der Eingangsstrom in einzelne Argumente für verrohrt git checkout --ours
oder--theirs
Mehr unter diesem Link .
Da es sehr unpraktisch wäre, dies jedes Mal über die Befehlszeile eingeben zu müssen, ist es möglicherweise keine schlechte Idee, einen Alias für die Shell Ihrer Wahl zu erstellen, wenn Sie ihn häufig verwenden : Bash ist der übliche .
Diese Methode sollte mindestens Git-Versionen 2.4.x funktionieren
git diff --name-only --diff-filter=U
.
git status | grep both | awk '{print $3}' | xargs git checkout --[theirs|ours]
. Schneller als Grepping, wenn Sie ein großes Projekt haben.
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]
.
Sie können -Xours
oder auch -Xtheirs
mit git merge
. So:
git reset --hard HEAD
)git merge -Xours
oder git merge -Xtheirs
)HAFTUNGSAUSSCHLUSS: Natürlich können Sie entweder nur eine Option auswählen -Xours
oder -Xtheirs
eine andere Strategie verwenden, die Sie natürlich Datei für Datei durchführen sollten.
Ich weiß nicht, ob es einen Weg dafür gibt checkout
, aber ich halte es ehrlich gesagt nicht für schrecklich nützlich: Die Auswahl der Strategie mit dem Befehl checkout ist nützlich, wenn Sie unterschiedliche Lösungen für unterschiedliche Dateien wünschen, andernfalls wählen Sie einfach den Ansatz der Zusammenführungsstrategie.
--theirs
oder --ours
-Option für Git v1.9.4. Ein Ansatz wäre git merge -s recursive -Xtheirs BRANCH
.
--theirs
und --ours
sind auch mit git nicht verfügbar 2.2.0
. Entweder war meine Antwort nicht präzise oder sie waren in einer älteren Git-Version verfügbar (diese Antwort ist in der IT-Epoche ziemlich alt). Der richtige Ansatz ist mit -X
. Ich aktualisiere entsprechend
git checkout --[ours/theirs] .
wird tun, was Sie wollen, solange Sie an der Wurzel aller Konflikte sind. Unsere / ihre betreffen nur nicht zusammengeführte Dateien, sodass Sie Konflikte nicht speziell erfassen / finden / etc müssen.
error: path 'foo/bar/blah' does not have our version
.
git diff --name-only --diff-filter=U | xargs git checkout --theirs
Scheint den Job zu machen. Beachten Sie, dass Sie in das Stammverzeichnis des Git-Repos cd'ed werden müssen, um dies zu erreichen.
Für den Fall, dass jemand anderes einfach alles aus einem Zweig (z. B. Master) mit dem Inhalt eines anderen überschreiben möchte, gibt es einen einfacheren Weg:
git merge origin/master --strategy=ours
Vielen Dank an https://stackoverflow.com/a/1295232/560114
Oder umgekehrt: Gibt es eine "ihre" Version von "git merge -s our"?
git checkout --ours -- .
? Dies.
bedeutet das aktuelle Verzeichnis, wenn es vom Arbeitsverzeichnisstamm angewendet wird, also im Grunde genommen das gesamte Arbeitsverzeichnis.--ours
Ich bin mir nicht sicher , ob das mit dem Flag funktioniert , und ich bin mir nicht sicher, wie es mit gelöschten oder umbenannten Dateikonflikten umgehen wird.