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.
110
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.
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.Antworten:
Durchsuchen Sie einfach das Arbeitsverzeichnis und senden Sie die Ausgabe über den Befehl xargs:
oder
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
quelle
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
mitgit merge
. So:git reset --hard HEAD
)git merge -Xours
odergit 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.quelle
--theirs
oder--ours
-Option für Git v1.9.4. Ein Ansatz wäregit merge -s recursive -Xtheirs BRANCH
.--theirs
und--ours
sind auch mit git nicht verfügbar2.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 entsprechendgit 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.quelle
error: path 'foo/bar/blah' does not have our version
.Scheint den Job zu machen. Beachten Sie, dass Sie in das Stammverzeichnis des Git-Repos cd'ed werden müssen, um dies zu erreichen.
quelle
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:
Vielen Dank an https://stackoverflow.com/a/1295232/560114
Oder umgekehrt: Gibt es eine "ihre" Version von "git merge -s our"?
quelle
Ich habe diese Funktion in der .zshrc- Datei hinzugefügt .
Verwenden Sie sie folgendermaßen:
gitcheckoutall theirs
odergitcheckoutall ours
quelle