Если я использую Тeam Фoundation Сource Сontrol, я могу легко вернуться к старому набору изменений.
Предполагая, что у меня есть файл с 4 версиями, каждая версия имеет набор изменений:
Теперь я нашел много ошибок в версиях 3 и 4 и хочу быстро вернуться к версии 2.
В Visual Studio я могу щелкнуть «Просмотр истории» в файле, щелкнуть «Набор изменений b347» («Версия 2»), а затем «Откат».
Теперь у меня есть новый набор изменений с файлом в версии 2, и я могу его зарегистрировать (у меня все еще есть версии 3/4 в моей истории, поэтому я также могу вернуться к ним когда-нибудь).
Я знаю, что в Git есть revert
, reset
(жесткий, мягкий), но я точно не знаю, что мне нужно сделать, чтобы достичь того же результата.
Итак, как лучше всего откатиться к старой версии в Git (предпочтительно через Visual Studio)?
git reset --hard b347
git push -f origin master
Это полностью удаляет c560
и d912
, но после этого вам нужно принудительно нажать.
См. В чем разница между Git Revert, Checkout и Reset?
Чтобы отменить изменения, создавая новые коммиты:
git revert d912 c560
Спасибо! Я принял ответ @ElpieKay, потому что он более подробный.
Не знаю, что такое регистрация в TFVC, но если вы просто хотите просмотреть файл v2, вы можете git checkout b347 -- thefilenameyouwant
проверить = зафиксировать и нажать. Я не хочу только просматривать, я хочу просматривать файл v2, их фиксировать и нажимать, чтобы обновить мое репо до v2.
вы хотите, чтобы изменения, которые вы внесли в v2, также были в v3 и v4?
нет. Я хочу, чтобы мое репо вернулось к версии 2 (но не удаляло версии 3 и 4 из истории коммитов).
Вы хотите, чтобы другие файлы были в версии 2 или они должны оставаться в версии 4?
Я хочу, чтобы все файлы вернулись к v2
Допустим, у вас есть 4 коммита A-B-C-D
, в каждом из них изменен файл foo.txt
, а коды C
и D
содержат ошибки, внесенные foo.txt
.
1.Возможно изменение других файлов на C и D. Если вы хотите откатить только foo.txt
на версию B
:
git checkout B -- foo.txt
Если вы хотите совершить откат,
git commit
И история будет A-B-C-D-R1
.
2. Если вы хотите отменить все изменения C и D (включая изменения других файлов, если они есть), и CD были отправлены в удаленный репозиторий:
git revert D C
И история будет A-B-C-D-R2-R3
.
3. Если вы хотите отменить все изменения C и D, и CD НЕ были отправлены в удаленный репозиторий:
git reset B --hard
История будет A-B
. Вы также можете использовать это решение для случая 2, но тогда вам нужно принудительно отправить ветку, чтобы перезаписать ветку в удаленном репозитории. Если другие участники получили старую историю, вам нужно попросить их получить новую историю.
Отличный ответ! Спасибо! Я не думаю, что смогу отменить 2 коммита в VS за один раз, но я могу сделать это в командной строке :)
@ShaykiAbramczyk Вот git revert B..D
тоже работает. B..D
означает C
и D
, и Git правильно вернет их в обратной последовательности. Это удобно, когда вы хотите отменить набор последовательных коммитов. Кроме того, опция --no-edit
делает процесс более плавным, если вы не хотите редактировать сообщение возврата по умолчанию.
Чтобы продолжить работу над состоянием v2 репозитория в вашей рабочей копии, вы можете сделать
# get uncommitted changes out of the way
git stash
# recreate v2 in the working copy
git checkout commit-hash-or-tag-of-v2
# create new branch based on v2
git checkout -b branchname-for-new-branch
Это так же просто, как:
git reset --hard b347
Объяснение:
Вы можете просто создать новую ветку в версии 2.
git checkout b347
git checkout -b redo-work-from-version-2
Объяснение:
redo-work-from-version-2
.
Но это удалит коммиты версии 3/4, а я этого не хочу. в TFVC откат не удаляет наборы изменений, а добавляет новый набор изменений с версией 2.