Повторное выполнение обратного слияния в Git
я столкнулся с небольшой проблемой здесь: у меня была проблемная ветвь 28s в Git, чтобы я слился в общее develop филиала. Оказывается, я сделал это слишком быстро, поэтому я использовал git-revert, чтобы отменить слияние. Теперь, однако, пришло время объединить 28s на develop, но команда git-merge видит исходное слияние и радостно объявляет, что все хорошо и ветви уже объединены. Что мне теперь делать? Создать вновь "вернуться "28С -> разработка"" ' совершал? Не кажется хороший способ сделать это, но я не могу представить другую на данный момент.
как выглядит древовидная структура:

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 сделал это очень естественно и не имел реального перипетии.
Он просто считал это изменением от "состояния до слияния" до "состояние после слияния", и это все.
Ничего сложного, ничего странного, ничего особо опасного. ГИТ сделает это, даже не думая об этом.Итак, с технической точки зрения, нет ничего плохого в возврате слияния, но С точки зрения рабочего процесса это то, что вы обычно должны попробовать избегайте.
если вообще возможно, например, если вы нашли проблему, которая была объединена в главное дерево,вместо того, чтобы отменить слияние, попробуйте действительно трудно:
- разделите проблему пополам в ветку, которую вы объединили, и просто исправьте ее,
- или попробуйте отменить индивидуальную фиксацию, которая вызвала ее.
Да, это сложнее, и нет, это не всегда будет работать (иногда ответ: "Ой, я бы не слили его, потому что это не было готов еще, и мне действительно нужно отменить все слияния"). Тогда вы действительно следует отменить слияние, но когда вы хотите повторно выполнить слияние, вы теперь нужно сделать это, вернув revert.
предположим, у вас есть такая история
---o---o---o---M---W---x-------x-------* / ---A---Bгде A, B неудачные коммиты и W-это возврат M
поэтому, прежде чем я начну исправлять найденные проблемы, я делаю вишневый выбор W commit для моей ветви
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 отменяет возврат и добавляет некоторые новые коммиты.
чтобы отменить возврат без слишком большого завинчивания рабочего процесса:
- создать локальную копию корзины разработки
- отменить фиксацию revert на локальной копии develop
- объединить эту копию на ветку, и ветку на свой git-сервер.
теперь ваша ветвь функций должна быть объединена как обычно, когда вы будете готовы к этому. Единственным недостатком здесь является то, что у вас будет несколько дополнительных слияний / возвратов фиксирует в своей истории.
вместо
git-revertвы могли бы использовать эту команду вdevelфилиала к выбросить (отменить) неправильное слияние фиксации (вместо того, чтобы просто вернуть его).git checkout devel git reset --hard COMMIT_BEFORE_WRONG_MERGEэто также позволит настроить содержимое рабочего каталога соответствующим образом. будьте осторожны:
- Сохранить изменения в ветке разработки (так как неправильное слияние), потому что они тоже будет стерт
git-reset. Все совершает после тот, который вы указываете как элемент
Я только что нашел этот пост, столкнувшись с той же проблемой. Я нахожу выше wayyy, чтобы страшно делать сброс хардов и т. д. Я в конечном итоге удалю то, что не хочу, и не смогу его вернуть.
вместо этого я проверил фиксацию, которую я хотел, чтобы ветка вернулась, например
git checkout 123466t7632723. Затем преобразуется в веткуgit checkout my-new-branch. Затем я удалил ветку я не хочу. Конечно, это будет работать только в том случае, если вы сможете выбросить ветку, которую вы испортили.
Comments