Отменить Git Rebase в Visual Studio, изменения зафиксированы, но не отправлены

Я использую Visual Studio, а не командную строку Git, для выполнения операций git, и я случайно выполнил перебазирование назад (мастер на ветвь вместо перехода на мастер, мастер находится дальше). Изменения зафиксированы, но не отправлены. Теперь показывает, что у меня 21 входящее изменение и 19 исходящих изменений. Есть ли какой-нибудь способ в Visual Studio IDE отменить перебазирование на этом этапе? Все входящие изменения находятся в исходящих изменениях, кроме изменений в ветке, поскольку у меня был последний код. Могу ли я просто просмотреть все исходящие изменения и отменить их? Отменит ли это изменения и для других пользователей и по существу удалит их?

Стоит ли изучать 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
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

tl;dr: (Скорее всего) все, что вам нужно сделать, это удалить локальную копию master. Если вы хотите сохранить его, удалите его и проверьте снова или git reset --hard origin/master.

Отказ от ответственности: в приведенных ниже примерах используется командная строка, но при желании вы можете делать большую часть этого и в пользовательском интерфейсе Visual Studio, например извлекать ветки и удалять их. (Я предполагаю, что вы знаете, как это сделать.)

Подробности:

Если у вас не было новых личных коммитов на master, то вы можете просто удалить свою локальную копию. В большинстве случаев вам даже не нужна локальная копия master, поскольку вы можете (и, возможно, должны) просто использовать origin/master вместо этого в любое время, когда вам нужно использовать его для чего-то. В Visual Studio просто используйте origin/master вместо master для того, что вы обычно делаете. Примеры командной строки:

# Update all my copies of remote branches:
git fetch

# Create a new branch
git switch -c some-new-feature origin/master --no-track

# Update your feature branch
git switch some-new-feature
git rebase origin/master
# Or in a single command even if your branch isn't checked out:
git rebase origin/master some-new-feature

Основное преимущество отсутствия локальной копии master заключается в том, что она обычно устарела, и если вы забудете ее обновить, вы будете использовать ее старую копию.

При этом, если вы действительно хотите иметь локальную копию, в вашем случае вы можете выполнить ее полный сброс:

# checkout master
git switch master

# reset it to the remote version which is what you had before the rebase:
git reset --hard origin/master
# OR
git reset --hard @{u} # this is just shorthand for the remote tracking branch

# OR just delete it and check it out again
git switch --detach # in case you have master checked out right now
git branch -D master # delete your local copy
git switch master # check it out again which will be origin/master

Примечание: в случае, если у вас действительно были личные коммиты master, которые вас интересуют, используйте git reflog, чтобы найти идентификатор коммита, который вы использовали прямо перед перебазированием, а затем резко сбросьте его до этого значения:

git switch master
git reset --hard <commit-id-before-rebase>

Судя по формулировке вопроса, я не думаю, что это так.

git reset --hard origin/master сделал то, что мне было нужно. Спасибо!

Tim F 06.04.2024 00:41

@TimF, точно. Просто короткая и приятная команда. Нет необходимости в таком длинном ответе, если честно :D

joker 09.04.2024 18:01

@joker Вот почему у меня вверху написано «tl;dr:». Но я только что подправил это, чтобы подчеркнуть, что удаление и повторная проверка или просто сброс ветки имеют тот же эффект.

TTT 09.04.2024 19:29

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