Это сделает это:
git diff -b --numstat \
| egrep $'^0\t0\t' \
| cut -d$'\t' -f3- \
| xargs git checkout HEAD --
- Запустите diff рабочей копии по индексу и дайте машиночитаемую сводку для каждого файла, игнорируя изменения в пробелах.
- Найдите файлы, которые не были изменены в соответствии с
diff -b
.
- Возьми их имена.
- Передайте их
git checkout
против кончика ветви.
Эта труба будет делать что-то разумное для каждого оставленного вами шага, так что вы можете начать с первой строки и добавить еще, чтобы увидеть, что происходит на каждом шаге.
Возможно, полезная альтернатива последней строке:
| git checkout-index --stdin
Это приведет к сбросу файлов к их поэтапному содержимому, а не к последнему принятому состоянию.
Вы также можете использовать git diff HEAD
в первой строке вместо этого, чтобы получить разность рабочей копии по последнему коммиту, а не по индексу.
Примечание : если у вас есть имена файлов с пробелами, вам сначала нужно добавить tr
:
git diff -b --numstat \
| egrep $'^0\t0\t' \
| cut -d$'\t' -f3- \
<b>| tr '\n' '\0' \</b>
Затем необходимо добавить переключатель -0
/ -z
к любой последней команде, которую вы хотите использовать:
| xargs <b>-0</b> git checkout HEAD --
# or
| git checkout-index --stdin <b>-z</b>