Как выполнить TFS-эквивалент «Отменить ожидающие изменения» - PullRequest
33 голосов
/ 03 ноября 2011

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

Это в основном означает выполнение этих шагов:

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

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

Ответы [ 4 ]

34 голосов
/ 03 ноября 2011

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

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

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

Для 3,

 git reset --hard HEAD^

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

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

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

git checkout HEAD -- <a list of files>

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

git reflog

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

git reset --hard HEAD@{1}

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

Добавить, если вы хотите стеретьигнорируемые файлы и неотслеживаемые файлы, вы можете стереть с этим:

git clean -xdf
5 голосов
/ 03 ноября 2011

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

git reset --hard

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

git reset --hard HEAD

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

git checkout -- file_name.extension
git checkout HEAD file_name.extension
2 голосов
/ 03 ноября 2011
  1. git checkout [path] или (весь репо) git reset --hard HEAD
  2. git reset [path] с последующим git checkout [path]
  3. git reset --hard [commit] для восстановления состояния репо на [commit], которое должно быть tree-ish
0 голосов
/ 15 мая 2015

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

...