Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

В этой проблеме есть лучший ответ, хотя я мог бы просто сломать это шаг за шагом.

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

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

Теперь вы хотите вернуть весь запрос на тягу с возможностью позже отменить его. Для этого вам нужно будет взять идентификатор фиксации слияния.

В приведенном выше примере объединение слияния является верхним, где указано "Объединенный запрос на вытягивание № 123...".

Сделайте это, чтобы вернуть оба изменения ( "Добавить панель" и "Добавить foo" ), и вы получите в одном компе, возвращающем весь запрос на растяжение, который вы можете позже удалить и сохранить историю изменений в чистоте:

git revert -m 1 b76a5f1f5d3b323679e466a1a1d5f93c8828b269

Ответ 2

Посмотрите на свой график фиксации (с помощью gitk или аналогичной программы). Вы увидите коммиты из запроса на вытягивание, и вы увидите свои собственные фиксации и фиксацию слияния (если бы это было не быстрое слияние). Вам просто нужно найти последние свои собственные коммиты перед слиянием и reset ветвь для этой фиксации.

(Если у вас есть ветка reflog, должно быть еще проще найти фиксацию до слияния.)


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

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

screenshot 1

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

enter image description here

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

Это означает, что в вашей локальной рабочей копии сделайте это (после того, как вы убедитесь, что у вас больше нет неподтвержденных вещей, например, git stash):

git checkout master
git reset --hard 7a62674ba3df0853c63539175197a16122a739ef
gitk 

Теперь подтвердите, что вы действительно находитесь на фиксации, который я там помечен, и вы не увидите ни одного из вытащенных материалов в своей родословной.

git push -f origin master

(если ваш удаленный github называется origin - иначе измените имя).

Теперь все должно выглядеть правильно на github. Коммиты будут по-прежнему находиться в вашем хранилище, но не достижимы ни одной веткой, поэтому они не должны навредить. (И они, конечно, будут все еще в репозитории RogerPaladin.)

(Возможно, существует только один способ Github для работы с одним и тем же, но я не слишком хорошо знаком с Github и системой управления запросами на pull.)

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

Если возможно, что это произошло, или вы просто хотите избежать каких-либо проблем, используйте команду git revert вместо git reset, чтобы отменить изменения с помощью новой фиксации вместо того, чтобы вернуться к более старой. (Некоторые люди думают, что вы никогда не должны делать reset с опубликованными ветвями.) См. Другие ответы на этот вопрос о том, как это сделать.

В будущем:

Если вы хотите использовать только некоторые из записей ветки RogerPaladin, используйте cherry-pick вместо merge. Или свяжитесь с RogerPaladin, чтобы переместить их в отдельную ветку и отправить новый запрос на pull.

Ответ 3

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

git reset --hard HEAD~1

Ответ 4

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

Представляем кнопку "Отменить"

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

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

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

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

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

Ответ 5

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

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

когда хеш фиксации является фиксацией PRIOR для слияния запроса на pull. Это приведет к удалению всех коммитов из запроса на растяжение без влияния на какие-либо фиксации в истории.

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

Pull Request ImagePull Request Image

После запуска git reset запустите a:

git push origin --force <branch name>

Это должно вернуть ветку назад перед запросом на вытягивание БЕЗ воздействия на какие-либо коммиты в ветке, запертой в историю фиксации, между фиксацией по запросу pull.

EDIT:

Если вы нажмете кнопку возврата на запрос тянуть, это создаст дополнительную фиксацию на ветке. Он НЕ РАСПРОСТРАНЯЕТСЯ или НЕ РАЗРЕШАЕТ. Это означает, что если вы нажмете кнопку возврата, вы не сможете открыть новый запрос на pull для повторного добавления всего этого кода.

Ответ 6

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

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

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

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

git reset --hard 9271e6e

Как и в большинстве случаев в Git, если вы делаете это не так просто, вы, вероятно, ошибаетесь.