Я сделал небольшой коммит и отправил его в нашу основную ветку в Azure DevOps. Я понял, что этот коммит устарел, так как был основан на неверных предположениях и недопонимании с моим коллегой, который сделал этот последний коммит основным.
Однако я решил отменить фиксацию с помощью запроса на включение, но, должно быть, сделал это неправильно. Я отменил это возвращение и, по сути, вернулся к состоянию моего исходного коммита, к которому на следующем шаге я бы вернулся снова (на этот раз «правильно»).
Таким образом, база кода и все файлы впоследствии будут в порядке в основной ветке, просто наша история Azure DevOps выглядит довольно «грязной». Например. строка фиксации (графическое представление коммитов линиями и точками).
Я прекрасно осознаю, что одной из целей использования Git является полная прозрачность, но мы небольшая команда, и мы очень открыто общаемся и согласны, что, если возможно, мы хотели бы избавиться от этого моего маленького «интермеццо», если это возможно.
Есть ли способ добиться этого?
Если у вас очень маленькая команда и вы больше заботитесь о хорошей истории, чем об ответственности, вы можете попробовать следующее: пометить последний хороший коммит в основной ветке, удалить (или переименовать) основную ветку и отправить ее на сервер, воссоздать основную ветку по адресу местоположение тега и нажмите. Прикажите команде тянуть.
Сомневаюсь, что тег azure
здесь уместен. Если этот вопрос сводится к простому сбросу и принудительному нажатии, то я не думаю, что тег azure-devops
тоже уместен. (Если вам не нужна дополнительная помощь во временном обходе политик для принудительного нажатия.)
@TTT удалил тег Azure. пока сохранил azure-devops, потому что не был уверен, смогу ли я достичь целевого состояния, не делая что-либо на dev.azure.com, а исключительно с помощью команд git.
Ответ dani-vta должен сработать. Альтернативно вы можете попытаться удалить весь испорченный коммит, ссылаясь на этот билет: stackoverflow.com/questions/59837187/…
Чтобы избавиться от одного или нескольких коммитов из истории коммитов, вы можете использовать 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, было именно тем, что я искал! Спасибо!
вы можете использовать
reset
+push --force-with-lease