Отменить слияние по запросу pull?
кто-то принял запрос, который они не должны были. Теперь у нас есть куча сломанного кода, объединенного. Как отменить запрос? Я просто собирался вернуть изменения в коммит непосредственно перед слиянием, но я заметил, что он слился в кучу коммитов. Итак, теперь есть все эти коммиты от этого человека за несколько дней до слияния. Как вы это отмените?
6 ответов:
есть лучший ответ к этой проблеме, хотя я мог бы просто разбить это шаг за шагом.
вам нужно будет получить и проверить последние изменения вверх по течению, например:
git fetch upstream git checkout upstream/master -b revert/john/foo_and_barвзглянув на журнала фиксации, вы должны найти что-то похожее на это:
commit b76a5f1f5d3b323679e466a1a1d5f93c8828b269 Merge: 9271e6e a507888 Author: Tim Tom <[email protected]> Date: Mon Apr 29 06:12:38 2013 -0700 Merge pull request #123 from john/foo_and_bar Add foo and bar commit a507888e9fcc9e08b658c0b25414d1aeb1eef45e Author: John Doe <[email protected]> Date: Mon Apr 29 12:13:29 2013 +0000 Add bar commit 470ee0f407198057d5cb1d6427bb8371eab6157e Author: John Doe <[email protected]> Date: Mon Apr 29 10:29:10 2013 +0000 Add fooТеперь вы хотите, чтобы отменить весь запрос pull с возможностью unrevert позже. Для этого вам нужно будет взять идентификатор merge commit.
на merge commit это верхний, где он говорит " Объединенный запрос на вытягивание #123...".сделать это, чтобы отменить изменения ("добавить бар" и "добавить foo") и вы в конечном итоге в одном коммите возвращаете весь запрос на вытягивание, который вы можете отменить позже и сохранить историю изменений в чистоте:
git revert -m 1 b76a5f1f5d3b323679e466a1a1d5f93c8828b269
посмотрите на свой график фиксации (с помощью gitk или аналогичной программы). Вы увидите коммиты из запроса pull, и вы увидите свои собственные коммиты и коммит слияния (если это не было быстрое слияние). Вам просто нужно найти последний из ваших собственных коммитов перед слиянием и сбросить ветку до этого коммита.
(если у вас есть reflog филиала, она должна быть еще легче найти совершал перед слиянием.)
(правка после получения дополнительной информации в комментарии:)
Ладно, давайте посмотрим на график:
Я предполагаю, что последний (самый правый) фиксации свой неправильно слияние по запросу pull, который объединил синюю линию, увиденную здесь. Твой последний хороший commit будет тем, что раньше на черной линии, здесь отмечено красным цветом:
сброс к этой фиксации, и вы должны быть в порядке.
это значит, в вашей локальной рабочей скопируйте это (убедившись, что у вас больше нет незафиксированных вещей, например, git stash):
git checkout master git reset --hard 7a62674ba3df0853c63539175197a16122a739ef gitkтеперь подтвердите, что вы действительно находитесь на фиксации, которую я отметил там, и вы не увидите ни одного из вытащенных вещей в своей родословной.
git push -f origin master(если ваш пульт GitHub называется
origin- еще изменить имя).теперь все должно выглядеть прямо на github, тоже. Коммиты по-прежнему будут находиться в вашем репозитории, но недоступны для любой ветви, поэтому не должны сделайте там что-нибудь плохое. (И они все еще будут в хранилище Роджерпаладина, конечно.)
(там может быть GitHub специфический веб-единственный способ сделать то же самое, но я не слишком хорошо знаком с Github и его системой управления запросами pull.)
Примечание что если кто-то еще уже мог вытащить вашего мастера с неправильным фиксацией, у них тогда есть та же проблема, что и у вас в настоящее время, и не может действительно внести свой вклад. перед сбросом на новый мастер версия.
если есть вероятность, что это произошло, или вы просто хотите избежать возможных проблем, используйте вместо
git reset, чтобы отменить изменения с новым фиксацией, вместо того, чтобы вернуться к более старому. (Некоторые люди думают, что вы никогда не должны делать сбросить с ветвей.) Смотрите другие ответы на этот вопрос о том, как это сделать.на будущее:
если вы хотите только некоторые из коммитов ветви RogerPaladin, рассмотрите используя
cherry-pickвместоmerge. Или связаться с RogerPaladin, чтобы переместить их в отдельную ветку и отправить новый запрос на вытягивание.
начиная с 24 июня 2014 года, вы можете попробовать отменить PR легко (см. "возврат запроса на вытягивание") С:
вы можете легко вернуть запрос на вытягивание на GitHub, нажав кнопку Вернуть:
вам будет предложено создать новый запрос с отогнутого изменения:
Это еще предстоит проверить хотя если это вернуть использует
-mили нет (для возврата слияния также)
чтобы отменить запрос GitHub pull с коммитами, которые вы не хотите удалять, вам нужно запустить:
git reset --hard --merge <commit hash>с хэшем фиксации, являющимся фиксацией до слияния запроса на вытягивание. Это позволит удалить все коммиты из запроса на вытягивание, не влияя на какие-либо коммиты в истории.
хороший способ найти это-перейти к теперь закрытому запросу pull и найти это поле:
после запуска
git resetвыполните:
git push origin --force <branch name>Это должно вернуть ветвь обратно до запроса на вытягивание, не затрагивая никаких коммитов в ветви, пересыпанной в историю коммитов между коммитами из запроса на вытягивание.
EDIT:
Если вы нажмете кнопку revert на запросе pull, это создаст дополнительную фиксацию в ветке. Это не исправить или не объединять. Это средство что если вы нажмете кнопку revert, вы не сможете открыть новый запрос pull, чтобы повторно добавить весь этот код.
Я использую это место все время, Спасибо.
Я искал как отменить запрос и попал сюда.
Я собирался просто
git reset --hardв "давным-давно" и сделайте быструю перемотку назад туда, где я был, прежде чем делать запрос на вытягивание.кроме того, глядя здесь, я также спросил моего коллегу, что он будет делать, и у него был типично хороший ответ: используя пример вывода в первый ответ выше:
git reset --hard 9271e6eКак и большинство вещей в Git, если ты делаешь это как-то не так просто, вы, наверное, делаете это неправильно.





Comments