Что эквивалентно TFVC «Откат» в Git?

Если я использую Тeam Фoundation Сource Сontrol, я могу легко вернуться к старому набору изменений.

Предполагая, что у меня есть файл с 4 версиями, каждая версия имеет набор изменений:

  • Набор изменений a126 - Версия 1.
  • Набор изменений b347 — Версия 2.
  • Набор изменений c560 — Версия 3.
  • Набор изменений d912 - Версия 4.

Теперь я нашел много ошибок в версиях 3 и 4 и хочу быстро вернуться к версии 2.

В Visual Studio я могу щелкнуть «Просмотр истории» в файле, щелкнуть «Набор изменений b347» («Версия 2»), а затем «Откат».

Теперь у меня есть новый набор изменений с файлом в версии 2, и я могу его зарегистрировать (у меня все еще есть версии 3/4 в моей истории, поэтому я также могу вернуться к ним когда-нибудь).

Я знаю, что в Git есть revert, reset (жесткий, мягкий), но я точно не знаю, что мне нужно сделать, чтобы достичь того же результата.

Итак, как лучше всего откатиться к старой версии в Git (предпочтительно через Visual Studio)?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
83
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

git reset --hard b347
git push -f origin master

Это полностью удаляет c560 и d912, но после этого вам нужно принудительно нажать.

См. В чем разница между Git Revert, Checkout и Reset?

Чтобы отменить изменения, создавая новые коммиты:

git revert d912 c560

Но это удалит коммиты версии 3/4, а я этого не хочу. в TFVC откат не удаляет наборы изменений, а добавляет новый набор изменений с версией 2.

Shayki Abramczyk 10.04.2019 11:57

Спасибо! Я принял ответ @ElpieKay, потому что он более подробный.

Shayki Abramczyk 11.04.2019 09:37

Не знаю, что такое регистрация в TFVC, но если вы просто хотите просмотреть файл v2, вы можете git checkout b347 -- thefilenameyouwant

проверить = зафиксировать и нажать. Я не хочу только просматривать, я хочу просматривать файл v2, их фиксировать и нажимать, чтобы обновить мое репо до v2.

Shayki Abramczyk 10.04.2019 11:53

вы хотите, чтобы изменения, которые вы внесли в v2, также были в v3 и v4?

escitalopram 10.04.2019 11:54

нет. Я хочу, чтобы мое репо вернулось к версии 2 (но не удаляло версии 3 и 4 из истории коммитов).

Shayki Abramczyk 10.04.2019 11:55

Вы хотите, чтобы другие файлы были в версии 2 или они должны оставаться в версии 4?

escitalopram 10.04.2019 11:57

Я хочу, чтобы все файлы вернулись к v2

Shayki Abramczyk 10.04.2019 12:26
Ответ принят как подходящий

Допустим, у вас есть 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 за один раз, но я могу сделать это в командной строке :)

Shayki Abramczyk 11.04.2019 09:36

@ShaykiAbramczyk Вот git revert B..D тоже работает. B..D означает C и D, и Git правильно вернет их в обратной последовательности. Это удобно, когда вы хотите отменить набор последовательных коммитов. Кроме того, опция --no-edit делает процесс более плавным, если вы не хотите редактировать сообщение возврата по умолчанию.

ElpieKay 11.04.2019 09:49

Чтобы продолжить работу над состоянием 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

(1) Как откатиться и «потерять» версии 3 и 4:

Это так же просто, как:

git reset --hard b347

Объяснение:

  • возвращается к версии 2.
  • вы «потеряете» версии 3 и 4.
  • если вы все еще хотите получить версии 3 и 4, то эти коммиты все еще доступны в вашем журнале ссылок в течение определенного периода времени в зависимости от ваших настроек (период времени по умолчанию составляет 90 дней из памяти).

или (2) Создайте новую ветку (чтобы сохранить версии 3 и 4):

  • Вы можете просто создать новую ветку в версии 2.

    git checkout b347

    git checkout -b redo-work-from-version-2

Объяснение:

  • Вы вернетесь к b347 в безголовом состоянии. Просто пока игнорируйте это.
  • Мы создаем новую ветку под названием redo-work-from-version-2.
  • Версия 3 и версия 4 по-прежнему будут существовать и доступны, но они будут в другой ветке.

Другие вопросы по теме