Как получить поведение SVN в Git

0

Я знаю, я знаю, git revertно я только что узнал, что он не ведет себя точно так же, как svn revert- по крайней мере, не в Visual Studio 2015 или, возможно, не в TortoiseGit. Я объясню:

Я новичок в VS2015 и новичок в Git. Когда я обнаружил, что VS2015 имеет встроенную Git-интеграцию, я попробовал это. Однако я работал над несколькими файлами и был готов зафиксировать только один из них. К сожалению, фильтр, который я применил на панели Team Explorer, не применился к тем файлам, которые были зафиксированы (я думаю, именно поэтому заголовок кнопки называется «Commit All»). Вместо этого он передал все «грязные» файлы - упс!

Обращаясь к TortoiseGit, чтобы просмотреть журнал моего репо, я выбрал самый последний (локальный) коммит и отменил его с помощью «Отменить изменения этого коммита». Я ожидал, что эта операция вернет файлы, над которыми я работал, до «грязного» состояния, в котором они находились до того, как я зафиксировал, как, например, SVN Revert, но, к моему удивлению, операция вернула мои локальные файлы в предыдущая версия репо , а не в том состоянии, в котором они находились до того, как я их совершил.

Конечно, я смог получить свою работу, потому что все это было в ревизии «все файлы», которую я изначально зафиксировал. Я просто начал копировать каждый файл из него в его каталог. Но чего мне здесь не хватает? Есть ли функция Git, которую я должен был использовать вместо Revert?

Крейг Сильвер
источник

Ответы:

0

В Git вы можете удалить весь коммит. Желательно, чтобы вы делали это только с коммитами, которые не выдвигаются. Вся «распределенная» часть Git делает это возможным. С SVN ваши изменения сразу же доступны для других. С Git они доступны только после нажатия («Синхронизация» в 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 есть несколько приятных привилегий для работы только для чтения, например, отличный просмотр различий.

Даниэль Б
источник
--mixedэто значение по умолчанию, а список изменений (AFAIK) является относительно новой вещью - раньше это требовалось git commit -v, не так ли?
Гравитация
@ grawity Да, --mixedпо умолчанию. Я добавил если для уточнения. Список изменений (ну, действительно, измененных файлов) всегда был там IIRC. У меня нет более старой версии Git, чтобы проверить это.
Даниэль Б