Як ви перезавантажуєте зміни поточної гілки поверх змін, що об’єднуються?


144

Добре. Якщо я перебуваю на гілці (скажімо working), і я хочу об'єднати зміни в іншій гілці (скажімо master), тоді я запускаю команду, git-merge masterперебуваючи на workingгілці, і зміни об'єднуються, не перетворюючи історію взагалі. Якщо я запускаю git-rebase master, то зміни в masterнакладеній основі повинні бути розміщені у верхній частині моєї workingгілки. Але що робити, якщо я хочу об'єднатись із змінами, masterале змінити зміни, workingщоб змінити рівень, щоб бути на вершині? Як це зробити? Чи можна це зробити?

Я міг би працювати git-rebase workingна своїй masterгілці, щоб змінити свої зміни на masterфілії, але я хотів би це зробити у своїй workingгілці, і я не знаю, як це зробити. Найближчим, що я можу подумати, - це створити нову гілку, masterа потім повторно workingзмінити зміни, але тоді я мав би нову гілку замість зміни workingгілки.

Відповіді:


255

У вас є те, що rebaseробить назад. git rebase masterробить те, що ви просите, - приймає зміни в поточній гілці (з моменту її відходження від головного) та повторно відтворює їх master, а потім встановлює голову поточної гілки як голову нової історії. Він не відтворює зміни masterзверху до поточної гілки.


3
@Jonathan це круто. Це трохи хитра тема. До речі, git rebase workingбуде рухатися master«s зміни (після точки , яка workingвідгалужується) , щоб бути у верхній частині workingгілки - але це не дуже розумно , що потрібно зробити , щоб master:)
Хоббс

66

Ще один спосіб поглянути на це - розглянути git rebase masterяк:

Обновіть поточну гілку поверх master

Тут ' master' - це гілка вище за течією , і це пояснює, чому під час ребазування oursі theirsповертаються .


Це також пояснює, чому LOCAL і REMOTE є зворотними. Дякую.
AVIDeveloper

@AVIDeveloper на локальних і віддалених, ви також можете прочитати stackoverflow.com/a/3052118/6309
VonC

5
@@ VonC: Дякую Так, після того, як проводжу пополудні, посміхаючись собі: "ВІДТРИМАТИ - це моя гілка. МІСЦЕВО - це не моє", воно все затонуло. Чесно кажучи, я хотів би побачити назви гілок (або абревіатуру. SHA) замість REMOTE / LOCAL / наше / їхнє / моє. Мої думки однакові щодо git difftoolжахливих лівих / правих. Якийсь тематичний, але difftoolя дотримуюся git-meld і насолоджуюся такими іменами, як "working-dir", "stash @ {0}" тощо.
AVIDeveloper

1
@VonC: Чи можете ви пояснити, як це може бути після того, як ми це зробимо: git checkout branch_to_update git rebase masterя потрапляю в git log комітетів master поверх локальної гілки, а не навпаки?
JavaSa

1
@JavaSa Це дивно, хіба що база даних не була належним чином завершена? Можливо, вам доведеться задати окреме запитання, в якому детальніше.
VonC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.