Операция git checkout -- file
работает строго в рабочем каталоге или в состоянии файловой системы вашего репозитория (обратите внимание, что между аргументом --
и file
есть пробел, чтобы отличить команду от проверки ветви или тег с именем file
).
Если в репозитории что-то было git add
, в терминологии git это часть индекса, и извлечение не исправит это, вам нужно использовать команду git reset
, которая обновляет состояние индекса.
В качестве ярлыка для выполнения обоих вышеперечисленных действий, git reset --hard
сбросит индекс и сбросит изменения в рабочем каталоге (так что ваш рабочий каталог и индекс находятся в идентичных состояниях (состояние, заданное аргументом опции; без каких-либо аргументов по умолчанию используется HEAD.) Обычные предостережения применяются в отношении того, чтобы убедиться, что вы не уничтожили вещи, которые хотите сохранить, если они не были зафиксированы, но, судя по звукам, это то, что вы хотите.
Что касается ускоренного слияния, git pull
должно позаботиться об этом автоматически, но, поскольку в терминах git получение включает в себя как выборку изменений из восходящего потока, так и слияние локальных веток с новым восходящим потоком, часть слияния этого потерпит неудачу, если у вас будет грязное рабочее дерево, поэтому вышеупомянутые команды должны быть выполнены (или другие перестановки операций фиксации / сохранения), прежде чем слияние может быть продолжено. Git, как правило, очень осторожен, чтобы не потерять работу, если вы специально не скажете ему, что это не важно.
В качестве рекомендации, если вы хотите отслеживать восходящий поток, сделайте это в своей основной ветке и внесите любые дополнительные изменения (даже если вы просто играете вокруг) в ветке тем, где вы можете свободно коммитить и не беспокоиться о том, чтобы быть в состоянии воспринимать изменения обратно из восходящего потока.
ОБНОВЛЕНИЕ: Если сброс / извлечение фактически не сбрасывает ваш рабочий каталог, проверьте свойство core.autocrlf в вашем каталоге: git config --get core.autocrlf
Если вы используете репозиторий, который выполняет обходы между Windows / UNIX / любыми файловыми системами с различными соглашениями о конце строки и пытается предотвратить безумие, которое кроется в нем, путем чтения файлов из файловой системы с помощью CRLF, как если бы они имели LF терминаторы, а затем реверсируют это преобразование при записи в файловую систему, идея в том, что вы можете работать с файлами обычно, не внося тонны пробелов, вносящих изменения в ваши файлы diff, но это часто вызывает больше проблем, чем необходимо. Попробуйте git diff --ignore-all-space
и, если он ничего не показывает, это ваша проблема, и вы можете попробовать обновить конфигурационный файл, чтобы отключить его, и повторить.