Ist es möglich zu fragen git diff
nicht verfolgte Dateien in die Diff-Ausgabe einbezieht, oder ist es am besten, wenn ich git add
auf die neu erstellten Dateien und die bereits bearbeiteten Dateien anwenden:
git diff --cached
?
Ist es möglich zu fragen git diff
nicht verfolgte Dateien in die Diff-Ausgabe einbezieht, oder ist es am besten, wenn ich git add
auf die neu erstellten Dateien und die bereits bearbeiteten Dateien anwenden:
git diff --cached
?
Mit aktuellen Git-Versionen können Sie git add -N
die Datei (oder --intent-to-add
), wodurch dem Index an dieser Stelle ein Blob mit der Länge Null hinzugefügt wird. Das Ergebnis ist, dass Ihre "untracked"-Datei nun zu einer Änderung wird, um den gesamten Inhalt dieser Datei mit der Länge Null hinzuzufügen, was in der "git diff"-Ausgabe angezeigt wird.
git diff
echo "this is a new file" > new.txt
git diff
git add -N new.txt
git diff
diff --git a/new.txt b/new.txt
index e69de29..3b2aed8 100644
--- a/new.txt
+++ b/new.txt
@@ -0,0 +1 @@
+this is a new file
Leider können Sie, wie bereits erwähnt, nicht git stash
während Sie eine --intent-to-add
anhängige Datei wie diese. Wenn Sie jedoch Dateien auslagern müssen, fügen Sie die neuen Dateien einfach hinzu und lagern sie dann aus. Oder Sie können die Emulation Workaround verwenden:
git update-index --add --cacheinfo \
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 new.txt
(die Einrichtung eines Alias ist hier sehr hilfreich).
Nicht 100%ig zutreffend, aber wenn Sie aus irgendeinem Grund Ihre Dateien nicht in den Index aufnehmen wollen, wie in der akzeptierten Antwort vorgeschlagen, gibt es eine weitere Möglichkeit:
Wenn die Dateien nicht getrackt sind, ist der Diff natürlich die ganze Datei, so dass Sie sie einfach mit weniger anzeigen können:
less $(git ls-files --others --exclude-standard)
Navigieren Sie zwischen ihnen mit :n
y :p
für die nächste und vorherige
Update aus den Kommentaren: Wenn Sie ein Patch-Format benötigen, können Sie es auch kombinieren mit git diff
:
git ls-files --others --exclude-standard -z | xargs -0 -n 1 git --no-pager diff /dev/null | less
Sie können in diesem Fall auch die Ausgabe in eine Datei umleiten oder einen anderen diff-Befehl verwenden.
Für mein tägliches interaktives Gitting (ich vergleiche ständig den Arbeitsbaum mit dem HEAD und möchte, dass nicht verfolgte Dateien im Vergleich enthalten sind), add -N/--intent-to-add
ist unbrauchbar, weil es bricht git stash
.
Hier ist also mein git diff
Ersatz. Es ist keine besonders saubere Lösung, aber da ich es wirklich nur interaktiv benutze, ist es für mich in Ordnung, wenn ich es hacke:
d() {
if test "$#" = 0; then
(
git diff --color
git ls-files --others --exclude-standard |
while read -r i; do git diff --color -- /dev/null "$i"; done
) | `git config --get core.pager`
else
git diff "$@"
fi
}
Einfach tippen d
schließt nicht verfolgte Dateien in das Diff ein (was für mich in meinem Arbeitsablauf wichtig ist), und d args...
verhalten sich wie normale git diff
.
Anmerkungen:
git diff
ist eigentlich nur eine Verkettung einzelner Diffs, so dass es nicht möglich ist, die d
Ausgabe eines "echten diff" -- mit der Ausnahme, dass alle nicht verfolgten Dateien zuletzt sortiert werden.git diff
. Wenn jemand herausfindet, wie man das macht, oder wenn vielleicht eine Funktion hinzugefügt wird zu git
hinterlassen Sie bitte hier einen Hinweis! 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.