Отменить слияние по запросу pull?



кто-то принял запрос, который они не должны были. Теперь у нас есть куча сломанного кода, объединенного. Как отменить запрос? Я просто собирался вернуть изменения в коммит непосредственно перед слиянием, но я заметил, что он слился в кучу коммитов. Итак, теперь есть все эти коммиты от этого человека за несколько дней до слияния. Как вы это отмените?

2301   6  

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 филиала, она должна быть еще легче найти совершал перед слиянием.)


(правка после получения дополнительной информации в комментарии:)

Ладно, давайте посмотрим на график:

screenshot 1

Я предполагаю, что последний (самый правый) фиксации свой неправильно слияние по запросу pull, который объединил синюю линию, увиденную здесь. Твой последний хороший commit будет тем, что раньше на черной линии, здесь отмечено красным цветом:

enter image description here

сброс к этой фиксации, и вы должны быть в порядке.

это значит, в вашей локальной рабочей скопируйте это (убедившись, что у вас больше нет незафиксированных вещей, например, 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, чтобы переместить их в отдельную ветку и отправить новый запрос на вытягивание.

Если тяга была последним, что он сделал тогда

git reset --hard HEAD~1

начиная с 24 июня 2014 года, вы можете попробовать отменить PR легко (см. "возврат запроса на вытягивание") С:

представляем кнопку возврата

вы можете легко вернуть запрос на вытягивание на GitHub, нажав кнопку Вернуть:

https://camo.githubusercontent.com/0d3350caf2bb1cba53123ffeafc00ca702b1b164/68747470733a2f2f6769746875622d696d616765732e73332e616d617a6f6e6177732e636f6d2f68656c702f70756c6c5f72657175657374732f7265766572742d70756c6c2d726571756573742d6c696e6b2e706e67

вам будет предложено создать новый запрос с отогнутого изменения:

https://camo.githubusercontent.com/973efae3cc2764fc1353885a6a45b9a518d9b78b/68747470733a2f2f6769746875622d696d616765732e73332e616d617a6f6e6177732e636f6d2f68656c702f70756c6c5f72657175657374732f7265766572742d70756c6c2d726571756573742d6e65772d70722e706e67

Это еще предстоит проверить хотя если это вернуть использует -m или нет (для возврата слияния также)

чтобы отменить запрос GitHub pull с коммитами, которые вы не хотите удалять, вам нужно запустить:

git reset --hard --merge <commit hash>

с хэшем фиксации, являющимся фиксацией до слияния запроса на вытягивание. Это позволит удалить все коммиты из запроса на вытягивание, не влияя на какие-либо коммиты в истории.

хороший способ найти это-перейти к теперь закрытому запросу pull и найти это поле:

Pull Request ImageПотяните Запрос Изображение

после запуска git reset выполните:

git push origin --force <branch name>

Это должно вернуть ветвь обратно до запроса на вытягивание, не затрагивая никаких коммитов в ветви, пересыпанной в историю коммитов между коммитами из запроса на вытягивание.

EDIT:

Если вы нажмете кнопку revert на запросе pull, это создаст дополнительную фиксацию в ветке. Это не исправить или не объединять. Это средство что если вы нажмете кнопку revert, вы не сможете открыть новый запрос pull, чтобы повторно добавить весь этот код.

Я использую это место все время, Спасибо.

Я искал как отменить запрос и попал сюда.

Я собирался просто git reset --hard в "давным-давно" и сделайте быструю перемотку назад туда, где я был, прежде чем делать запрос на вытягивание.

кроме того, глядя здесь, я также спросил моего коллегу, что он будет делать, и у него был типично хороший ответ: используя пример вывода в первый ответ выше:

git reset --hard 9271e6e

Как и большинство вещей в Git, если ты делаешь это как-то не так просто, вы, наверное, делаете это неправильно.

Comments

    Ничего не найдено.