Здесь я столкнулся с небольшой проблемой: 28s
в Git была ветвь для конкретной проблемы , которую я слил в общую develop
ветку. Оказывается, я сделал это слишком быстро, поэтому я использовал git-revert, чтобы отменить слияние. Теперь, однако, пришло время , чтобы объединить 28s
в develop
, но команда ГИТ-слияние видит оригинальное слияние, и с радостью объявляет , что все хорошо и ветви были уже объединены. Что мне теперь делать? Создать 'Revert' Revert '28s -> Develop' '' коммит? Кажется, это не очень хороший способ сделать это, но я не могу представить другого в данный момент.
Как выглядит древовидная структура:
git
git-merge
git-revert
Томс Микосс
источник
источник
Ответы:
Вы должны «вернуть вспять». В зависимости от того, как вы вернули оригинал, это может быть не так просто, как кажется. Посмотрите на официальный документ по этой теме .
позволять:
источник
Давайте предположим, что у вас есть такая история
Где A, B не удалось зафиксировать, а W - вернуть M
Поэтому, прежде чем я начну исправлять найденные проблемы, я делаю вишневый выбор W коммит в мою ветку
Затем я возвращаю W коммит на мою ветку
После я могу продолжить исправление.
Финальная история может выглядеть так:
Когда я отправляю пиар, он ясно показывает, что пиар отменяется, и добавляет новые коммиты.
источник
Чтобы отменить возврат, не слишком усложняя рабочий процесс:
Теперь ваша ветвь функций должна быть в состоянии объединяться как обычно, когда вы к этому готовы. Единственным недостатком здесь является то, что у вас будет несколько дополнительных коммитов / слияний в вашей истории.
источник
Чтобы отменить возврат в GIT:
источник
Вместо использования
git-revert
вы могли бы использовать эту команду вdevel
ветке, чтобы отбросить (отменить) неправильный коммит слияния (вместо того, чтобы просто вернуть его).Это также изменит содержание рабочего каталога соответствующим образом. Будьте осторожны :
git-reset
. Все коммиты после того, который вы указали в качествеgit reset
аргумента, пропадут!Я рекомендую
git-reset
внимательно изучить страницу руководства, прежде чем пытаться это сделать.Теперь, после сброса, вы можете повторно применить ваши изменения
devel
и затем сделатьЭто будет реальным слияние с
28s
вdevel
как исходной (который теперь стертого из истории Git и ).источник
reset --hard
иpush origin
. Также имейте в виду, что принудительный толчок к источнику может действительно испортить открытые PR на GitHub.Я только что нашел этот пост, когда столкнулся с той же проблемой. Выше я считаю, что страшно делать сброс хардов и т. Д. В конечном итоге я удалю что-то, чего не хочу, и не смогу вернуть его обратно.
Вместо этого я проверил коммит, к которому я хотел вернуться, например, ветвь
git checkout 123466t7632723
. Затем преобразуется в филиалgit checkout my-new-branch
. Затем я удалил ветку, которую больше не хотел. Конечно, это будет работать только в том случае, если вы сможете отбросить испорченную ветку.источник
git reflog
защитит вас при полной перезагрузке на пару месяцев на случай, если позже вы обнаружите, что вам нужны потерянные коммиты. Рефлог ограничен вашим локальным репо.Я бы предложил вам выполнить следующие шаги, чтобы отменить возврат, скажем, SHA1.
Теперь создайте пиар для филиала
users/yourname/revertOfSHA1
источник
На этом этапе у вас будет чистая ветвь «разработки», в которую вы можете объединить свой набор функций, как вы это делаете регулярно.
источник