
Знаю, знаю, git revert
но я только что узнал, что это не совсем так, как svn revert
-- по крайней мере, в Visual Studio 2015, или, может быть, в TortoiseGit. Я объясню:
Я новичок в VS2015, а также новичок в Git. Когда я обнаружил, что VS2015 имеет интеграцию Git прямо из коробки, я попробовал это сделать. Однако я работал над несколькими файлами и был готов зафиксировать только один из них. К сожалению, фильтр, который я применил в панели Team Explorer, не применился к файлам, которые были зафиксированы (полагаю, поэтому кнопка называется «Зафиксировать все»). Вместо этого она зафиксировала все «грязные» файлы — упс!
Прибегнув к TortoiseGit для просмотра журнала моего репозитория, я выбрал самый последний (локальный) коммит и отменил его с помощью «Отменить изменения по этому коммиту». Я ожидал, что эта операция вернет файлы, над которыми я работал, в «грязное» состояние, в котором они были до того, как я сделал коммит, как это делает SVN Revert, но к моему удивлению, операция вернула мои локальные файлы к предыдущемуреповерсии, а не к тому состоянию, в котором они были до того, как я их совершил.
Конечно, я смог восстановить свою работу, потому что она была в ревизии "все файлы", которую я изначально зафиксировал. Я просто принялся копировать каждый файл из нее в его законный каталог. Но что я упускаю здесь? Есть ли функция Git, которую я должен был использовать вместо Revert?
решение1
В Git можно удалить весь коммит. Лучше всего делать это только с коммитами, которые не были отправлены. Вся «распределенная» часть Git делает это возможным. С SVN ваши изменения немедленно становятся доступны другим. С Git они становятся доступны только после отправки («Sync» в Visual Studio).
Итак, вместо того, чтобы откатить коммит (что означает, что ошибочные изменения останутся в репозитории и могут иметь неожиданные побочные эффекты), сделайте git reset --mixed HEAD~1
. Это означает, что ваш рабочий каталог останется как есть, но последний коммит будет удален. Это означает, что Git снова покажет все файлы как измененные.
Возврат в Git создает «обратный» коммит отмененного вами коммита, отменяя все изменения.
Затем, чтобы зафиксировать только один файл, сначала проверьте, git status
что Git не имеет нежелательных изменений в индексе. Затем используйте git add path/to/file.txt
для индексации (только) этого файла. После этого просто выполните git commit
, используйте соответствующее сообщение о фиксации и все готово.
Когда вы запустите git commit
и откроется текстовый редактор, файл также будет содержать список изменений, которые будут зафиксированы. Внимательно проверьте этот список, чтобы убедиться, что вы фиксируете только то, что хотите.
Также не используйте Visual Studio для активной работы с Git. Он пытается применить устаревшие термины TFS к операциям Git, но это не одно и то же. Вместо этого попробуйте изучить Git в консоли. Visual Studio имеет несколько приятных бонусов для работы только для чтения, например, отличный просмотр различий.