904 Stimmen

Was ist der einfachste Weg, um konfliktbehaftete Dateien in Git aufzulisten?

Ich brauche nur eine einfache Liste von widersprüchlich Dateien.

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 schätze, ich könnte ein Handy einrichten. alias dafür, fragte sich aber, wie Profis das machen. Ich würde es benutzen, um Shell-Schleifen zu schreiben, z.B. um Konflikte automatisch aufzulösen, etc. Vielleicht ersetzen Sie diese Schleife durch ein Plugin in mergetool.cmd ?

3 Stimmen

git rebase --continue listet Dateien mit Konflikten auf (falls es welche gibt)

2 Stimmen

Git-Status ist ausreichend

1 Stimmen

In einer konfliktbehafteten Merge-Sitzung zeigt "git merge --continue" die Liste der Dateien mit Konflikten an.

1561voto

CB Bailey Punkte 693084

Verwenden Sie git diff, mit Nur der Name um nur die Namen anzuzeigen, und diff-filter=U um nur 'Unmerged'-Dateien einzuschließen (optional, relativ um Pfade relativ zum aktuellen Arbeitsverzeichnis anzuzeigen) .

git diff --name-only --diff-filter=U --relative

184 Stimmen

Ich habe dafür einen Alias erstellt: git config --global alias.conflicts "diff --name-only --diff-filter=U"

4 Stimmen

@CharlesBailey, habe ich etwas verpasst? Was ist falsch mit git status ?

13 Stimmen

@Pacerier, es ist nur unordentlicher. Wenn Sie eine Million konfliktfreie Zusammenführungen und eine konfliktbehaftete Zusammenführung hätten, würden Sie etwas Prägnantes für die Ausgabe wollen.

172voto

cnlevy Punkte 9910

git diff --check

zeigt die Liste der Dateien mit Konfliktmarkierungen an einschließlich Zeilennummern .

Zum Beispiel:

> git diff --check
index-localhost.html:85: leftover conflict marker
index-localhost.html:87: leftover conflict marker
index-localhost.html:89: leftover conflict marker
index.html:85: leftover conflict marker
index.html:87: leftover conflict marker
index.html:89: leftover conflict marker

Quelle: https://ardalis.com/detect-git-conflict-markers

4 Stimmen

Ich habe gefunden git diff --check auch auf andere (weniger schwerwiegende) Probleme hinweisen, wie z. B. Leerzeichen am Ende des Textes, so dass ein git diff --check | grep -i conflict könnte für den Fall von OP in Ordnung sein

2 Stimmen

git diff --check verwendet die Leerzeichenregeln von core.whitespace. Sie können alle Whitespace-Prüfungen deaktivieren, wenn Sie git Aufruf, um nur Konfliktmarkierungen zu erhalten: git -c core.whitespace=-trailing-space,-space-before-tab,-indent-wi‌​th-non-tab,-tab-in-i‌​ndent,-cr-at-eol diff --check

0 Stimmen

Schön! Es zeigt auch Dinge wie nachlaufende Ws <3

45voto

Jones Agyemang Punkte 989

Hier ist eine narrensichere Methode:

grep -H -r "<<<<<<< HEAD" /path/to/project/dir

13 Stimmen

Nein. Der Index von Git markiert bestimmte Dateien auch dann noch intern als konfliktbehaftet, wenn die textlichen Markierungen in den Dateien entfernt wurden.

10 Stimmen

Abgesehen von Alexanders Kommentar ist es immer noch nützlich, dies als Option zu sehen :) Bitte nicht löschen.

3 Stimmen

Oder um innerhalb des aktuellen Arbeitsverzeichnisses zu arbeiten, verwenden Sie einen Punkt als Pfad - grep -H -r "<<<<<<< HEAD" .

42voto

inger Punkte 18344

Ich versuche, meine Frage zu beantworten:

Nein, eine einfachere Methode als die in der Frage beschriebene scheint es nicht zu geben (out of box).

Nachdem ich das zu oft eingetippt hatte, fügte ich die kürzere Version in eine ausführbare Datei mit dem Namen "git-conflicts" ein, die ich für Git zugänglich machte, und jetzt kann ich einfach: git conflicts um die von mir gewünschte Liste zu erhalten.

Update: wie Richard vorschlägt, können Sie einen Git-Alias einrichten, als Alternative zur ausführbaren Datei

git config --global alias.conflicts '!git ls-files -u | cut -f 2 | sort -u'

Ein Vorteil der Verwendung der ausführbaren Datei gegenüber dem Alias ist, dass Sie das Skript für Teammitglieder freigeben können (in einem Bin-Verzeichnis, das Teil des Repo ist).

1 Stimmen

Mir ging es damals genauso - ich dachte mir, wie zum Teufel können die Leute das nicht brauchen, und sah, wie trivial es zu umgehen war. Aber ich benutze Git jetzt seit 2 Jahren und bin ehrlich gesagt nicht mehr auf diese "Einschränkung" gestoßen. Vielleicht ist das also gar nicht so ein häufiger Anwendungsfall?

4 Stimmen

Dies ist so einfach, dass Sie einen Alias dafür einrichten können git config --global alias.conflicts "!git ls-files -u | cut -f 2 | sort -u" (das ! bedeutet, dass dieser Shell-Befehl ausgeführt wird und nicht nur ein Git-Befehl).

1 Stimmen

Erwähnenswert ist, dass Sie "einfache Anführungszeichen" anstelle von "doppelten Anführungszeichen" benötigen. Andernfalls wird die ! wird von Ihrer Shell interpretiert: git config --global alias.conflicts '!git ls-files -u | cut -f 2 | sort -u'

28voto

Rafa Punkte 1261

git status zeigt neben Dateien, die Konflikte aufweisen, "beide geändert" anstelle von "geändert" oder "neue Datei" usw.

3 Stimmen

Das ist wahr. Aber in dieser speziellen Frage ging es um eine einfache Liste von Dateien mit Konflikten. Das könnte ein XY-Problem sein (ich kann mich nicht erinnern, warum ich diese Konfliktliste tatsächlich brauchte, aber die Tatsache, dass ich sie seitdem nicht mehr gebraucht habe, könnte darauf hindeuten, dass ich damals einen anderen Ansatz hätte verfolgen sollen. Ich bin mir jetzt nicht sicher. Ich habe auch Skripte für die automatische Lösung von Java-Importkonflikten geschrieben, die diese Liste benötigten, d.h. nicht-interaktive Verwendung)

0 Stimmen

Oh, das hatte ich nicht verstanden. Ich dachte, Sie wollten eine "normale" Liste für den "normalen" Gebrauch. Deshalb bin ich bei deinem eigenen Code und deiner Selbst-Antwort ausgeflippt... dann habe ich gemerkt, dass das "both modified"-Ding bei mir funktioniert (und ich habe angenommen, dass du einfach dasselbe wolltest wie ich, warum auch nicht? ;-P ) Danke für das Upvote allerdings :)

1 Stimmen

Es kann auch zu Konflikten beim Zusammenführen kommen, wenn ein Zweig eine Datei löscht und der andere sie ändert. Diese werden nicht angezeigt mit git status | grep "both modified" .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X