Ich brauche nur eine einfache Liste von Dateien mit Konflikten .
Gibt es etwas Einfacheres als:
git ls-files -u | cut -f 2 | sort -u
oder:
git ls-files -u | awk '{print $4}' | sort | uniq
Ich denke, ich könnte ein Handy alias
dafür einrichten , habe mich aber gefragt, wie Profis das machen. Ich würde es verwenden, um Shell-Schleifen zu schreiben, z. B. um Konflikte automatisch zu lösen usw. Vielleicht diese Schleife durch Einstecken ersetzen mergetool.cmd
?
git
git-merge
git-merge-conflict
Inger
quelle
quelle
git rebase --continue
listet Dateien mit Konflikten auf (falls vorhanden)git rebase --continue
Ich habe die Konflikte nicht aufgelistet, sondern nur gesagt, ich soll sie beheben (Git-Version 2.21.0)Antworten:
quelle
git config --global alias.conflicts "diff --name-only --diff-filter=U"
git status
?git conflicts
git diff --check
funktioniert besser.git diff --check
zeigt die Liste der Dateien mit Konfliktmarkierungen einschließlich Zeilennummern an .
Zum Beispiel:
Quelle: https://ardalis.com/detect-git-conflict-markers
quelle
git diff --check
erzählte mir von anderen (weniger ernst) Probleme zu, wie nachfolgende Leerzeichen, so dass ein ,git diff --check | grep -i conflict
um für OP Fall sein könnteIch versuche meine Frage zu beantworten:
Nein, es scheint keinen einfacheren Weg als den fraglichen zu geben.
Nachdem ich das zu oft eingegeben habe, habe ich einfach die kürzere in eine ausführbare Datei mit dem Namen 'git-Konflikt' eingefügt, die git zugänglich gemacht wurde. Jetzt kann ich nur noch:
git conflicts
die gewünschte Liste erhalten.Update: Wie Richard vorschlägt, können Sie alternativ zur ausführbaren Datei einen Git-Alias einrichten
Ein Vorteil der Verwendung der ausführbaren Datei gegenüber dem Alias besteht darin, dass Sie dieses Skript für Teammitglieder freigeben können (in einem bin dir-Teil des Repos).
quelle
git config --global alias.conflicts "!git ls-files -u | cut -f 2 | sort -u"
(bedeutet! Diesen Shell-Befehl ausführen und nicht nur einen Git-Befehl).!
wird das von Ihrer Shell interpretiert:git config --global alias.conflicts '!git ls-files -u | cut -f 2 | sort -u'
Hier ist ein narrensicherer Weg:
quelle
grep -H -r "<<<<<<< HEAD" .
c
gutes Ergebnis hinzufügen, zählt auch die Anzahl der Konflikte! Eine Anmerkung ist, dass ich Flags verwenden würde,-Hrn
die auch Zeilennummerninformationen liefern.[<=>]{7}
stattdessen vorschlagen . (Möglicherweise ist ein-E
Flag erforderlich , damit dies in grep funktioniert.) Oder<{7}
wenn Sie sich keine Sorgen über baumelnde Zusammenführungsmarkierungen machen oder die Konflikte zählen möchten. (Sie können auch verwendengit grep
- dann brauchen Sie die-r
Flagge nicht.)git status
zeigt "beide geändert" neben Dateien mit Konflikten anstelle von "geändert" oder "neue Datei" usw. anquelle
quelle
^U
um alles mit UDD, AU, UD, UA, DU, AA, UU
DU
Das funktioniert bei mir:
git grep '<<<<<<< HEAD'
oder
git grep '<<<<<<< HEAD' | less -N
quelle
Sie können schlagen
git ls-files -u
auf Ihre Befehlszeile klicken, um Dateien mit Konflikten aufzulistenquelle
Wenn Sie versuchen, einen Commit durchzuführen, und wenn es Konflikte gibt, gibt Ihnen git die Liste der derzeit ungelösten Konflikte ... aber nicht als einfache Liste. Dies ist normalerweise das, was Sie möchten, wenn Sie interaktiv arbeiten, da die Liste kürzer wird, wenn Sie die Konflikte beheben.
quelle
Möglicherweise wurde dies zu Git hinzugefügt, aber die Dateien, die noch aufgelöst werden müssen, werden in der Statusmeldung (Git-Status) wie folgt aufgelistet:
Beachten Sie, dass dies der Abschnitt Nicht zusammengeführte Pfade ist.
quelle
Angenommen, Sie wissen, wo sich Ihr Git-Stammverzeichnis $ {GIT_ROOT} befindet, können Sie Folgendes tun:
quelle
Ich habe immer nur verwendet
git status
.kann
awk
am Ende hinzufügen , um nur die Dateinamen zu erhaltengit status -s | grep ^U | awk '{print $2}'
quelle
Meine 2 Cent hier (auch wenn es viele coole / funktionierende Antworten gibt)
Ich habe diesen Alias in meinem erstellt
.gitconfig
Das wird mir nur die Namen der Dateien mit Konflikten zeigen ... nicht ihren ganzen Pfad :)
quelle
Folgendes verwende ich, um geänderte Dateien aufzulisten, die für die Befehlszeilensubstitution in Bash geeignet sind
Verwenden Sie zum Bearbeiten der Liste die
$(cmd)
Substitution.Funktioniert nicht, wenn die Dateinamen Leerzeichen enthalten. Ich habe versucht,
sed
die Leerzeichen zu maskieren oder zu zitieren, und die Ausgabeliste sah richtig aus, aber die$()
Ersetzung hat sich immer noch nicht wie gewünscht verhalten.quelle
Der Dienstprogramm-Git-Assistent https://github.com/makelinux/git-wizard zählt ungelöste Konfliktänderungen (Kollisionen) und nicht zusammengeführte Dateien separat. Konflikte müssen manuell oder mit mergetool gelöst werden. Gelöste nicht zusammengeführte Änderungen können in der Regel mit git rebase --continue hinzugefügt und festgeschrieben werden.
quelle
geringfügige Abweichung von Charles Baileys Antwort, die weitere Informationen enthält:
quelle
Wie in anderen Antworten hervorgehoben, können wir einfach den Befehl git status verwenden und dann nach Dateien suchen, die unter Nicht zusammengeführte Pfade aufgeführt sind:
quelle