to zrobi:
git diff -b --numstat \
| egrep $'^0\t0\t' \
| cut -d$'\t' -f3- \
| xargs git checkout HEAD --
- Uruchom diff kopii roboczej w stosunku do indeksu i zwięzłe odczytu maszynowego dla każdego pliku, ignorując zmiany spacji.
- Znajdź pliki, które nie uległy zmianie zgodnie z
diff -b
.
- Weź ich nazwiska.
- Przekaż je do
git checkout
na czubku gałęzi.
Ta rura zrobi coś sensownego dla każdego kroku, który zakończysz, więc możesz zacząć od pierwszej linii i dodać więcej, aby zobaczyć, co dzieje się na każdym kroku.
A mogą użyteczna alternatywa ostatnia linia:
| git checkout-index --stdin
byłoby to przywrócenie plików do ich inscenizowanych treści zamiast do ostatniego stanu zaangażowanej.
Możesz także użyć git diff HEAD
w pierwszym wierszu, aby uzyskać różnicę kopii roboczej względem ostatniego zatwierdzenia zamiast indeksu.
Uwaga: jeśli masz nazwy plików ze spacjami w nich, będzie trzeba najpierw dodać tr
:
git diff -b --numstat \
| egrep $'^0\t0\t' \
| cut -d$'\t' -f3- \
| tr '\n' '\0' \
Następnie należy dodać -0
/-z
przełącznik Niezależnie od ostatecznego rozkazu ty chciał użyć:
| xargs -0 git checkout HEAD --
# or
| git checkout-index --stdin -z
Szybka uwaga: na wszystkich takich plikach uruchomisz 'git checkout', a nie' git reset'. – Cascabel
Należycie zauważyć, thnx! –