Участие в проекте на github, как «перебазировать мой пулреквест поверх master»

98

Хорошо, я участвую в проекте на github. Проект на github - это upstreamмое разветвленное репо на github origin, а мое localрепо на моем компьютере.

git checkout -b feature
# Working on feature
git commit -a -m 'only commit on feature'

затем я отправляю запрос на перенос

git push origin master

Запрос на вытягивание проверяется, и необходимо внести не связанные с ним изменения. Кто-то другой делает коммит и сливается сupstream/master

Теперь upstreamсопровождающий просит меня «переустановить мой запрос на включение поверх главного».

Это моя история (вставьте звуковой эффект Закона и порядка) ...

Я не вносил никаких изменений в запрос на вытягивание, и это все та же функция фиксации в ветке.

git checkout master
git fetch upstream
git checkout feature
git rebase master
=> "Current branch feature is up to date."
git push origin feature
=> "Everything up-to-date"

Я не понимаю Как это возможно, если я знаю, что кто-то совершил слияние с кем-то upstream/masterпосле того, как я отправил свой запрос на перенос origin/feature?

Может ли кто-нибудь сказать мне, какой должна быть правильная процедура в этой ситуации?

fontno
источник

Ответы:

110

Вы показываете выборку только в восходящем репо. Это фактически не обновляет ни одну из ваших локальных веток. Это только обновляет ваши знания о файлахupstream . Вам нужно будет убедиться, что upstream/masterон полностью объединен с вашим master, например, с a git pull, перед повторным размещением на master, или, проще говоря, просто переназначить upstream/master.

Т.е.:

git checkout master
git pull upstream master
git checkout feature
git rebase master

или

git checkout feature
git rebase upstream/master

Обновить:

После исправления локальной featureветки вам нужно будет вернуть ее, originчтобы завершить обновление запроса на перенос. Поскольку вы уже нажали featureодин раз, вы не можете просто pushснова, потому что перебазирование меняет историю, и это не долгая перемотка вперед. Обычно, когда толчок завершается неудачно с «без перемотки вперед», вы разрешаете его, выполняя тяну, но тяга просто объединяет две расходящиеся истории, что определенно не то, что вам нужно. Это будет означать, что ваша старая featureветка (до перебазирования) будет объединена с новой (после перебазирования). Вы хотите перезаписать origin/feature состояние новой featureветки, сбрасывая любую запись старой. Это означает, что вы захотите принудительно выполнить нажатие, даже если это не перемотка вперед, используя git push -f origin feature. Примечание:опасно , и вы можете потерять с ним коммиты. Используйте его только в том случае, если вы абсолютно уверены, что знаете, что делаете, например, прямо здесь, когда вы намеренно хотите отбросить старые, бесполезные коммиты в featureветке перед перебазированием .

Райан Стюарт
источник
1
Хорошо, понятно, спасибо за пояснение. Я вижу, что надо было тянуть, а не тянуть. Теперь у меня другая проблема, когда я git push origin featureполучаю ошибку, не связанную с перемоткой вперед, не могу нажать и т. Д. Может ли git pull --rebase разрешить эту ошибку и передать ее в мою ветку функций, или это вызовет проблемы для сопровождающего и других?
fontno
1
Обновил мой ответ, чтобы охватить толчок.
Райан Стюарт
В моем случае я добавил репозиторий восходящего потока как удаленный, но забыл получить от него данные. git fetch upstreamскачал последние изменения, потом в итоге git rebase upstream/developзаработал.
Альберто Кьюзоле
10

Теперь сопровождающий вверх по течению просит меня «перебазировать мой запрос на включение поверх главного»

Обратите внимание, что с сентября 2016 г. сопровождающий может сам инициировать перебазирование.

См. " Rebase and merge pull requests "

Когда вы выбираете новую опцию «Rebase and merge», коммиты из ветки запроса на вытягивание перебазируются на верхушку базовой ветви, а затем сама базовая ветвь быстро пересылается в эту недавно перемещенную головку. Rebases автоматически устанавливает коммиттера перемещенных коммитов на текущего пользователя, сохраняя при этом информацию об авторстве. Ветвь запроса на вытягивание не будет изменена этой операцией.

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

https://cloud.githubusercontent.com/assets/2195/18671961/a03fa9b6-7f35-11e6-8fa0-e16b2fede8ca.gif

VonC
источник