Спільний внесок у проект на github, як “перебазувати мій запит на витягування зверху майстра”


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?

Хтось може сказати мені, якою повинна бути правильна процедура в цій ситуації?

Відповіді:


109

Ви показуєте вибірку лише в попередньому репо. Це насправді не оновлює жодне з ваших місцевих відділень. Він лише оновлює ваші знання проupstream . Вам доведеться переконатися, що upstream/masterвін повністю злитий з вашим master, як і 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отримую помилку, що не перемотується вперед, не вдається натиснути і т.д.
fontno

1
Оновив свою відповідь, щоб охопити поштовх.
Райан Стюарт,

У моєму випадку я додав репозиторій вище за течією як віддалений, але забув забрати з нього. git fetch upstreamзавантажив останні зміни, потім врешті-решт git rebase upstream/developзапрацював.
Альберто Кюзоле,

9

Тепер мене звертає супровідник "перебазувати мій запит на витягування поверх майстра"

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

Див. " Перебазувати та об’єднати запити на витягування "

Коли ви вибираєте новий параметр "Перебазувати та об'єднати", коміти з гілки запиту витягування перебазуються на кінчик базової гілки, а потім сама базова гілка швидко перенаправляється до цієї нещодавно перебазованої головки. Rebases автоматично встановлює комітер перебазованих комітів поточному користувачеві, зберігаючи інформацію про авторство незмінною. Ця операція не змінить гілку запиту витягування.

Якщо перебазування неможливо виконати через конфлікти, ми повідомимо вас, щоб ви могли вручну вирішити їх за необхідності.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.