Was ist der einfachste Weg, um die Liste konfliktbehafteten Dateien in Git?
Brauche ich nur eine schlichte Liste der Konflikt - Dateien.
Ist es etwas einfacher 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 eine praktische alias
jedoch Frage mich, wie die Profis es tun. Ich würde es verwenden, um zu schreiben, die shell-Schleifen, z.B. um auto-Konflikte, etc. Vielleicht ersetzen, die Schleife, indem Sie in mergetool.cmd
?
- ja, Sie können tun sort-u anstelle von sort | uniq 😛
- cool, das ist gut zu wissen, danke -- vielleicht tag der Q-mit 'Sortieren' oder shell-scripting 😉
- Ich verwechselt werden könnte, aber warum kann man nicht erstellen Sie ein Git-alias (oder haben Sie sich auf Sie beziehen, wenn Sie erwähnt, "alias"?)? git.wiki.kernel.org/index.php/Aliases
- eigentlich ja, das habe ich auch getan, denke ich.
git rebase --continue
wird die Liste der Dateien mit Konflikten (falls vorhanden)- scheint, dass die Verwendung von 'git' statt 'get' in der Frage ist, ein unbeabsichtigtes Wortspiel, aber anscheinend wurde Sie brauchbar
- was macht Sie denken, dass es unbeabsichtigt?
- Lassen Sie mich vorschlagen, eine Neuformatierung - "Was ist der einfachste Weg, um eine Liste der konfliktbehafteten Dateien in git?". Wenn das Wortspiel beabsichtigt war, dann besser es so lassen
- git status ist genug
- In den Konflikt der merge-Sitzung " git merge --weiter` zeigt die Liste der Dateien mit Konflikten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
git config --global alias.conflicts "diff --name-only --diff-filter=U"
git status
?git conflicts
git config --global alias.conflicts "diff --name-only --diff-filter=U"
A
für zusätzlichen DateienM
für geänderte Dateien und so weiter. Siehe auch doc für mehr info: git-scm.com/docs/git-diff#Documentation/...git diff --check
besser funktioniert.Versucht, mir die Frage zu beantworten:
Nein, es scheint nicht einfacher Art und Weise als die in der Frage, die out-of-box.
Nach der Eingabe, dass in zu vielen Zeiten, gerade eingefügt die kürzere in eine ausführbare Datei mit dem Namen "git-Konflikte', zugänglich gemacht git, ich kann jetzt nur:
git conflicts
um die Liste, die ich wollte.Update: wie Richard schon sagt, können Sie ein git alias, als alternative zu der ausführbaren
Ein Vorteil der Verwendung der ausführbaren Datei über den alias ist, den Sie teilen können, dass script mit team-Mitglieder (in einem bin dir Teil der repo).
git config --global alias.conflicts "!git ls-files -u | cut -f 2 | sort -u"
(die ! bedeutet die Ausführung dieses shell-Befehl, anstatt nur einen git-Befehl).!
interpretiert werden, die von Ihrer shell:git config --global alias.conflicts '!git ls-files -u | cut -f 2 | sort -u'
git diff --check
zeigt die Liste der Dateien mit Konflikt-Marker einschließlich Zeilennummern.
Beispiel:
Quelle : https://ardalis.com/detect-git-conflict-markers
Hier ist eine narrensichere Weg:
grep -H -r "<<<<<<< HEAD" .
c
schön Ergebnisse die Anzahl der Konflikte zu! Ein Hinweis ist, dass ich die use-flags-Hrn
dies wird auch supply line number information.[<=>]{7}
statt dessen. (Möglicherweise müssen-E
Flagge für das arbeiten in grep.) Oder<{7}
wenn Sie nicht besorgt über die baumelnden merge-Marker oder zählen möchten, die Konflikte. (Sie können auchgit grep
- dann brauchen Sie nicht die-r
Flagge.)H
- Flag bedeutet, dass der name der Datei werden angezeigt.r
heißt rekursiv, Wenn Siegit grep
Sie setzen--files-with-matches
statt derH
Flagge.git status
zeigt "beide geändert" neben Dateien, die Konflikte, statt "geändert" oder "neue Datei", etc^U
um alles, beginnend mit UDD, AU, UD, UA, DU, AA, UU
DU
grep
in den ersten Platz?--diff-filter
option.grep -E "^([AUD][AU]|[UD]D) "
. Siehe regex101.com/r/Wh1fUi/1^(.U|U.|AA|DD)
.Diese funktioniert bei mir:
git grep '<<<<<<< HEAD'
oder
git grep '<<<<<<< HEAD' | less -N
können Sie schlagen
git ls-files -u
auf Ihren Befehl die Zeile Listen-down-Dateien mit KonfliktenVielleicht wurde Hinzugefügt Git, aber die Dateien, die noch nicht geklärt sind aufgelistet in der status-Nachricht (git status) wie folgt:
Beachten Sie, dass dies die Individuellen Pfade Abschnitt.
Wenn Sie versuchen, Sie zu Begehen, und wenn es Konflikte gibt, dann git wird Ihnen die Liste der aktuell ungelöste Konflikte... aber nicht als eine einfache Liste. Dies ist in der Regel, was Sie wollen, wenn Sie arbeiten interaktiv, denn die Liste wird kürzer als Sie lösen die Konflikte.
Vorausgesetzt, Sie wissen, wo Sie Ihre git root-Verzeichnis ${GIT_ROOT}, ist, Sie tun können,
Ich habe immer nur verwendet
git status
.hinzufügen können
awk
am Ende bekommen nur die Dateinamengit status -s | grep ^U | awk '{print $2}'
Meine 2 Cent hier (auch wenn es eine Menge von kühl - /Arbeits-Antworten)
Habe ich diesen alias in meine
.gitconfig
die gehen, um mir zu zeigen, nur die Namen der Dateien mit Konflikten... nicht Ihre ganze Weg 🙂
Hier ist, was ich verwenden, um eine Liste der geänderten Dateien für command-line-substitution in der bash
Bearbeiten Sie die Liste verwenden
$(cmd)
substitution.Funktioniert nicht, wenn die Dateinamen Leerzeichen enthalten. Ich habe versucht, zu verwenden
sed
zu entkommen oder Sie zu zitieren, die Leerzeichen und die Ausgabe-Liste nach rechts geschaut, aber die$()
substitution noch nicht so Verhalten wie gewünscht.leichte variation von Charles Bailey ' s Antwort, gibt weitere Informationen:
Als hervorgehoben in der anderen Antwort(en), die wir verwenden einfach den Befehl git status und dann suchen Sie nach Dateien aufgelistet, die unter nicht zusammengeführte Pfade: