it-roy-ru.com

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

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

Это в основном означает сделать эти шаги:

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

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

31
Seb Nilsson

Для 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 до этого - на случай, если у вас есть ожидающие изменения.

Это сбросит текущую ветвь к родителю текущего коммита. Посмотрите "дерево" в Интернете. ^ и ~ 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 [email protected]{1}

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

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

git clean -xdf
33
Adam Dymitruk

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

git reset --hard

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

git reset --hard HEAD

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

git checkout -- file_name.extension
git checkout HEAD file_name.extension
5
Manu
  1. git checkout [path] или (весь репо) git reset --hard HEAD
  2. git reset [path], за которым следует git checkout [path]
  3. git reset --hard [commit] для восстановления состояния репо в [commit], который должен быть tree-ish
2
Fred Foo

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

0
Henrique de Sousa