Повторное выполнение обратного слияния в Git
я столкнулся с небольшой проблемой здесь: у меня была проблемная ветка 28s
в Git, что я слился в общем develop
филиала. Оказывается, я сделал это слишком быстро, поэтому я использовал git-revert для отмены слияния. Теперь, однако, пришло время слияния 28s
на develop
, но команда git-merge видит исходное слияние и радостно объявляет, что все хорошо и ветви уже объединены. Что мне теперь делать? Создайте "Revert "Revert" 28s -> develop" "" commit? Не кажется хороший способ сделать это, но я не могу представить другую на данный момент.
как выглядит древовидная структура:
6 ответов
вы должны "отменить возврат". Зависит от того, как вы это вернули, это может быть не так просто, как кажется. Посмотри официальный документ на эту тему.
---o---o---o---M---x---x---W---x---Y
/
---A---B-------------------C---D
позволяет:
---o---o---o---M---x---x-------x-------*
/ /
---A---B-------------------C---D
но все ли это работает? Конечно. Вы можете отменить слияние, а из чисто технический угол, git сделал это очень естественно и не имел реального перипетии.
Он просто считал это изменением от "состояния перед слиянием" до "состояние после слияния", и это все.
Ничего сложного, ничего лишнего, ничего опасного. ГИТ сделает это, даже не задумываясь.Итак, с технической точки зрения, нет ничего плохого в возврате слияния, но!--14-->С точки зрения рабочего процесса это то, что вы обычно должны пытаться избегайте.
если вообще возможно, например, если вы нашли проблему, которая была объединена в главное дерево,а не отменить слияние, попробовать действительно трудно:
- раздвоить ее на ветке ты слился и просто исправить,
- или попробуйте отменить индивидуальную фиксацию, которая вызвала ее.
Да, это сложнее, и нет, это не всегда будет работать (иногда ответ: "упс, я действительно не должен был объединять его, потому что это не было готов еще, и мне действительно нужно отменить все слияния"). Тогда вы действительно следует отменить слияние, но когда вы хотите повторно выполнить слияние, вы теперь нужно сделать это, вернув revert.
предположим, у вас есть такая история
---o---o---o---M---W---x-------x-------*
/
---A---B
где A, B неудачные коммиты и W-возврат M
поэтому, прежде чем я начну исправлять найденные проблемы, я делаю cherry-pick W commit to my branch
git cherry-pick -x W
затем я возвращаю W commit на мою ветку
git revert W
после того, как я могу продолжить исправление.
окончательная история может выглядеть так:
---o---o---o---M---W---x-------x-------*
/ /
---A---B---W---W`----------C---D
когда я отправляю PR, он ясно показывает, что PR отменяется и добавляет некоторые новые коммиты.
чтобы отменить возврат без завинчивания рабочего процесса слишком много:
- создайте локальную копию корзины develop
- отменить фиксацию возврата на локальной копии develop
- объединить эту копию на ветку, и ветку на свой git-сервер.
теперь ваша ветвь функций должна быть объединена как обычно, когда вы будете готовы к этому. Единственным недостатком здесь является то, что у вас будет несколько дополнительных слияний/возвратов фиксации в вашей истории.
вместо git-revert
вы могли бы использовать эту команду в devel
филиала к выбросить (отменить) неправильный коммит слияния (вместо того, чтобы просто возвращать его).
git checkout devel
git reset --hard COMMIT_BEFORE_WRONG_MERGE
это также скорректирует содержимое рабочего каталога соответствующим образом. будьте осторожны:
-
Сохранить изменения в ветви разработки (так как неправильное слияние), потому что они
слишком будет стерт
git-reset
. Все коммиты после тот, который вы указываете как the
Я только что нашел этот пост, столкнувшись с той же проблемой. Я нахожу выше wayyy, чтобы страшно сделать сброс хардов и т. д. Я в конечном итоге удалю то, что не хочу, и не смогу вернуть его.
вместо этого я проверил фиксацию, которую я хотел, чтобы ветка вернулась, например git checkout 123466t7632723
. Затем преобразуется в ветвь git checkout my-new-branch
. Затем я удалил ветку я не хочу. Конечно, это будет работать только в том случае, если вы сможете выбросить ветку, которую вы испортили.