Подтвердить что ты не робот

Git reset файлы с типом changechange

При поиске и замене в большом репозитории я получаю кучу файлов с статусом changechange. Это в основном символические ссылки.

Вместо

git checkout -- eachfile.name

Есть ли способ reset записывать только файлы обмена?

4b9b3361

Ответ 1

git status | grep typechange | awk '{print $2}' | xargs git checkout

Ответ 2

В большинстве случаев лучше удалить символические ссылки из вашего репозитория. Если вы работаете в разных операционных системах, проблема связана с ссылками в вашем репозитории.

Когда вы удалите его и установите в новое место, ваш файл будет изменен.

Некоторые клиенты Java Git имеют проблемы с символическими ссылками. Они пытаются следовать за ними, и вы получаете сообщение об ошибке. У меня была эта проблема с клиентом Jenkins.

Чтобы добавить все символические ссылки в .gitignore, вы можете запустить следующую команду под Linux

find /your/directory -type l >> .gitignore

Ответ 3

Вкус существующего ответа, но я предпочитаю:

git status --porcelain | awk '{if ($1=="T") print $2}' | xargs git checkout

--porcelain предназначен для такого использования.

Обратите внимание, что этот ответ awk и существующий ответ могут быть разбиты на имена файлов, содержащие пробелы, переводы строк и т.д., И в этом случае мы можем использовать.

git status -z | perl -0 -ne 'print $1 if /^\s*T\s*(.+)$/s' | xargs -0 git checkout

git status -z - это тот, который действительно рекомендуется для такого использования, и null завершает каждую запись. perl -0 имеет дело с тем, что -ne обрабатывает заданную команду для каждой строки (или "запись"). $1 относится к первой группе захвата здесь, которая будет включать имя файла и нулевой ограничитель.