Отменить и удалить историю коммитов Azure DevOps?

Я сделал небольшой коммит и отправил его в нашу основную ветку в Azure DevOps. Я понял, что этот коммит устарел, так как был основан на неверных предположениях и недопонимании с моим коллегой, который сделал этот последний коммит основным.

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

Таким образом, база кода и все файлы впоследствии будут в порядке в основной ветке, просто наша история Azure DevOps выглядит довольно «грязной». Например. строка фиксации (графическое представление коммитов линиями и точками).

Я прекрасно осознаю, что одной из целей использования Git является полная прозрачность, но мы небольшая команда, и мы очень открыто общаемся и согласны, что, если возможно, мы хотели бы избавиться от этого моего маленького «интермеццо», если это возможно.

Есть ли способ добиться этого?

вы можете использовать reset + push --force-with-lease

Roman Marusyk 08.07.2024 15:49

Если у вас очень маленькая команда и вы больше заботитесь о хорошей истории, чем об ответственности, вы можете попробовать следующее: пометить последний хороший коммит в основной ветке, удалить (или переименовать) основную ветку и отправить ее на сервер, воссоздать основную ветку по адресу местоположение тега и нажмите. Прикажите команде тянуть.

agbinfo 08.07.2024 16:19

Сомневаюсь, что тег azure здесь уместен. Если этот вопрос сводится к простому сбросу и принудительному нажатии, то я не думаю, что тег azure-devops тоже уместен. (Если вам не нужна дополнительная помощь во временном обходе политик для принудительного нажатия.)

TTT 09.07.2024 06:38

@TTT удалил тег Azure. пока сохранил azure-devops, потому что не был уверен, смогу ли я достичь целевого состояния, не делая что-либо на dev.azure.com, а исключительно с помощью команд git.

schluk5 09.07.2024 10:50

Ответ dani-vta должен сработать. Альтернативно вы можете попытаться удалить весь испорченный коммит, ссылаясь на этот билет: stackoverflow.com/questions/59837187/…

Andy Li-MSFT 12.07.2024 11:40
Стоит ли изучать 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
5
114
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Чтобы избавиться от одного или нескольких коммитов из истории коммитов, вы можете использовать git reset --hard или git rebase --interactive , а затем push Force в удаленный репозиторий.

В первом случае вы должны сбросить свой репозиторий до определенного коммита, удалив последние n коммитов. В вашем случае последние три коммита.

# make sure to be on the right branch
git checkout my_branch

# resetting to the third to last commit
git reset --hard HEAD~3

# or alternatively, resetting to a specific commit via its SHA1
git reset --hard <SHA1-third-to-last-commit>

# aligning the remote's branch' history and tip to the local branch
git push --force

Во втором случае вы можете выполнить интерактивную перезагрузку, при которой вы удалите последние три коммита.

# make sure to be on the right branch
git checkout my_branch

# starting the interactive rebase
git rebase --interactive HEAD~3

# aligning the remote's branch' history and tip to the local branch
git push --force

Во время перебазирования откроется редактор, показывающий три последних коммита с предварительно выбранной опцией pick. Замените pick на drop, сохраните и, наконец, закройте редактор.

drop d790c9e my undesired commit
drop 61f4eb1 first revert
drop f33cd8c revert of the first revert

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

Решение, описанное в случае 1, было именно тем, что я искал! Спасибо!

schluk5 18.07.2024 16:23

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