Как выполнить TFS-эквивалент "Отменить ожидающие изменения"

Как выполнить эквивалент TFS "Отменить ожидающие изменения" в Git, на одном или нескольких файлах?

Это в основном означает выполнение следующих действий:

  • Отменить изменения на диске
  • Сброс любых изменений Git обнаружил
  • Получение последних изменений в файле из Git

Было бы хорошо знать различия (если они есть) в командах для этого, если вы (1) просто изменили его на диск, не добавляя его, но также, когда вы 've (2) сделал добавленную команду и для бонуса (3), даже если вы зафиксировали изменение.

Ответ 1

Для 1 и 2 все, что вам нужно сделать, это:

 git stash -u #same effect as git reset --hard, but can be undone

это отбросит любые изменения. Будьте осторожны, если вы используете reset. Читайте об управлении индексом и перестановках жестких, мягких и смешанных опций с помощью reset и checkout. В книге прогитов это подробно объясняется: http://progit.org/2011/07/11/reset.html

Для 3,

 git reset --hard HEAD^

но было бы лучше выпустить git stash -u до этого - на случай, если у вас есть ожидающие изменения.

Это будет reset текущая ветвь родительского элемента текущей фиксации. Посмотрите "дерево-иш" онлайн. ^ и ~ N после ссылки позволит вам указать на любые точки достижимости в истории этой ссылки. Чтобы понять, как отслеживается история в git, "Git для компьютерных ученых" хорошо объясняет диаграмму направленного ациклического графика: http://eagain.net/articles/git-for-computer-scientists/

Чтобы получить отдельные файлы из состояния текущей фиксации (т.е. выбросить изменения), вы можете использовать checkout

git checkout HEAD -- <a list of files>

Если вы выдали последнюю reset команду выше по ошибке, у вас нет проблем. Git отслеживает, где ветки указывали в рефлоге.

git reflog

перечислит вам историю. Вы можете видеть в этом выпуске, как ссылаться на каждый, так:

git reset --hard [email protected]{1}

будет reset ветвь, где раньше она была изменена.

Чтобы добавить, если вы хотите стереть проигнорированные файлы и файлы без следа, вы можете стереть с помощью этого:

git clean -xdf

Ответ 2

Эта команда отменяет локальные изменения и восстанавливает их в текущие версии в репозитории:

git reset --hard

Вы можете вернуться к своей последней действительной фиксации, выпустив:

git reset --hard HEAD

Если вы хотите восстановить только один файл, вместо этого используйте git checkout:

git checkout -- file_name.extension
git checkout HEAD file_name.extension

Ответ 3

  • git checkout [path] или (всего репо) git reset --hard HEAD
  • git reset [path], за которым следует git checkout [path]
  • git reset --hard [commit], чтобы восстановить состояние репо в [commit], которое должно быть tree-ish

Ответ 4

Мой эквивалент TFS undo в Git с Eclipse - это просто щелкнуть правой кнопкой мыши файл и выбрать Replace withHEAD Revision (или любую другую версию, которая вам нужна).