Отменить git update-index --assume-unchanged <file>

То, как вы Git игнорируете просмотр / отслеживание определенного каталога / файла. вы просто запустите это:

git update-index --assume-unchanged <file>

Теперь, как вы отменяете это, чтобы они снова смотрели? (Давайте назовем это не предполагать.)

8 ответов

Решение

Чтобы получить отменить / показать каталоги / файлы, для которых установлено, что они не изменяются, запустите:

git update-index --no-assume-unchanged <file>

Чтобы получить список каталогов / файлов, которые assume-unchanged запустите это:

git ls-files -v|grep '^h'

Если вы часто используете эту команду - возможно, вы захотите использовать для нее и псевдоним. Добавить в свой глобальный .gitconfig:

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged

После сохранения этого в вашем .gitconfig, вы можете запустить команду чище.

git hide myfile.ext

или же

git unhide myfile.ext

Этот ресурс был очень полезным

Синтезировать превосходные оригинальные ответы от @adardesign, @adswebwork и @AnkitVishwakarma и комментарии от @Bdoserror и @Retsam, с дополнительными ссылками на документацию и псевдонимом оболочки...

Основные команды

Чтобы вернуть файл, который предполагается неизменным, обратно в нормальное состояние:

git update-index --no-assume-unchanged <file>

Чтобы вывести список всех файлов, которые предполагается неизменными:

git ls-files -v | grep '^[a-z]' | cut -c3-

Чтобы вернуть все файлы без изменений в нормальное состояние:

git update-index --really-refresh

Ярлыки

Чтобы эти общие задачи легко выполнялись в git, добавьте следующий раздел в .gitconfig для вашего пользователя (например, ~/.gitconfig в системе *nix или macOS):

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged
    unhide-all = update-index --really-refresh
    hidden = ls-files -v

Чтобы упростить выполнение перечисления всех файлов, которые не изменяются в оболочке, которая поддерживает псевдоним (например, bash), создайте псевдоним, например:

alias git-hidden="git hidden | grep '^[a-z]' | cut -c3-"

Для оболочек без псевдонима скрипт может помочь.

Функция git update-index имеет несколько опций, которые вы можете найти, набрав, как показано ниже:

git update-index --help

Здесь вы найдете различные варианты - как справиться с функцией update-index.

[если вы не знаете имя файла]

git update-index --really-refresh 

[если вы знаете имя файла]

git update-index --no-assume-unchanged <file>

вернет все файлы, которые были добавлены в список игнорирования через.

git update-index --assume-unchanged <file>

Я полагаю (хе) ты имел ввиду --assume-unchanged, так как я не вижу никаких --assume-changed вариант. Обратное --assume-unchanged является --no-assume-unchanged,

Если вы хотите отменить все примененные файлы, предполагая, что они не изменяются с любым состоянием, а не только кэшированы (git помечает их символом в нижнем регистре), вы можете использовать следующую команду:

git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
  1. git ls-files -v распечатает все файлы с их статусом
  2. grep '^[a-z]' будет фильтровать файлы и выбирать только предполагать неизменным
  3. cut -c 3- удалит статус и оставит только пути, вырезая от 3-го символа до конца
  4. tr '\012' '\000' заменит символ конца строки (\012) на ноль (\000)
  5. xargs -0 git update-index --no-assume-unchanged передаст все пути, разделенные нулевым символом, git update-index --no-assume-unchanged отменить

Добавление к @adardesignответ, если вы хотите сбросить все файлы, которые были добавлены в assume-unchanged список к no-assume-unchanged за один раз вы можете сделать следующее:

git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true

Это просто удалит два символа, выведенных из grep, т.е. "h ", затем экранируйте все пробелы, которые могут присутствовать в именах файлов, и, наконец, || true предотвратит преждевременное завершение команды в случае ошибок в некоторых файлах цикла.

Если вы используете Git Extensions, выполните следующие действия:

  1. Перейти к фиксации окна.
  2. Нажмите на раскрывающееся меню "Изменения в рабочем каталоге".
  3. Выберите параметр Показать предполагаемые неизмененные файлы.
  4. Щелкните правой кнопкой мыши по файлу, который вы хотите отменить.
  5. Выберите Не предполагать без изменений.

Вы сделали.

Ничто здесь не покрыто. Но хотел бы добавить свои 2 цента. Иногда я запускаю сборку, и она меняет много файлов, а затем я хочу что-то поработать, поэтому эта команда мне очень помогает.

git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`

Надеюсь, кому-то это тоже пригодится.

Ни одно из решений у меня не сработало в Windows - похоже, используется заглавная буква H скорее, чем h для состояния файла, а команде grep требуется дополнительная вставка, как ^ также представляет начало строки, а также отрицание следующего символа.

Решение для Windows

  1. Откройте Git Bash и перейдите в соответствующий каталог верхнего уровня.
  2. git ls-files -v | grep '^^H' перечислить все некэшированные файлы
  3. git ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree для отмены пропуска всех файлов, которые были выполнены с помощью update-index --skip-worktree
  4. git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged для отмены пропуска всех файлов, которые были выполнены с помощью update-index --assume-unchanged
  5. git ls-files -v | grep '^^H' чтобы снова перечислить все некэшированные файлы и проверить, сработали ли вышеуказанные команды - теперь это не должно ничего возвращать

Если вы используете eclipse, вам может пригодиться следующее:

Так и случилось! Я случайно нажал кнопку "Принять без изменений"! Я пробовал искать в Интернете, но не нашел рабочего решения! Итак, я пробовал кое-что здесь и там, и, наконец, я нашел решение (самое простое) для этого, которое отменит исходное предположение без изменений!

Щелкните правой кнопкой мыши "Ваш проект", затем Team > Advanced > Noassume Unchanged.

Другие вопросы по тегам