У моєму сховищі є відділення, над aq
яким я працюю.
Потім я вчинив нову роботу і помилки master
.
Який найкращий спосіб отримати ці комісії у aq
філії? Створіть із нього нову гілку master
та з’єднаєте її aq
?
git pull origin my_branch_name
У моєму сховищі є відділення, над aq
яким я працюю.
Потім я вчинив нову роботу і помилки master
.
Який найкращий спосіб отримати ці комісії у aq
філії? Створіть із нього нову гілку master
та з’єднаєте її aq
?
git pull origin my_branch_name
Відповіді:
Ознайомтеся з aq
відділенням та перезавантажтесь master
.
git checkout aq
git rebase master
git merge
було б краще. Якщо з часом розвивалися обидві гілки, слід розглянути, що найкраще підходить для вас.
Ви повинні мати можливість просто git merge origin/master
коли ви перебуваєте на своїй аквалійській гілці.
git checkout aq
git merge origin/master
rebase
якщо ваша філія локальна і на неї не натискали origin
. Використовуйте, merge
якщо ваше відділення вже висунуте. rebase
перепише історію.
Спочатку перевірити майстер:
git checkout master
Виконайте всі зміни, виправлення та доручення та натисніть свого господаря.
Поверніться до своєї філії, 'aq', і об'єднайте в ній master:
git checkout aq
git merge master
Ваша філія буде в курсі майстра. Хорошим і базовим прикладом злиття є 3.2 Git Branching - Basic Branching and Merging .
Немає гарантії, що виправлення помилок master не є серед інших комітетів, отже, ви не можете просто об’єднати. Зробіть
git checkout aq
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit3
...
припускаючи, що ці комірки представляють виправлення помилок.
Відтепер зберігайте виправлення помилок в окремій гілці. Ви зможете просто
git merge hotfixes
коли ви хочете перенести їх у звичайну гілку розробників.
Або cherry-pick
відповідні зобов'язання у філію, aq
або об'єднання гілки master
в гілку aq
.
Це ( звідси ) працювало для мене:
git checkout aq
git pull origin master
...
git push
Цитування:
git pull origin master
виймає та об'єднує вміст головного відділення з вашою гілкою та створює комісію злиття. Якщо виникають конфлікти злиття, про це вам буде повідомлено на цьому етапі, і ви повинні вирішити об'єднання об'єднань, перш ніж продовжувати . Коли ви будете готові надіслати свої локальні комісії, включаючи нову комісію злиття, на віддалений сервер, запустітьgit push
.
У вас є пара варіантів. git rebase master aq
на гілку, яка буде зберігати імена фіксації, але НЕ ВІДМОВИТИ, якщо це віддалена гілка. Ви можете, git merge master aq
якщо вам не байдуже зберігати імена комітів. Якщо ви хочете зберегти імена фіксації, і це віддалений відгалуження, git cherry-pick <commit hash>
здійснює здійснення вашої філії.
Ви також можете це зробити, запустивши один рядок.
git merge aq master
Це еквівалентно
git checkout aq
git merge master
git merge a b
зливає гілки a
і b
в поточну гілку. Але git merge a
коли ти на гілці a
, нічого не зробиш (саме тому це виглядає трохи так, як це робить те, що ти думаєш, що робить). (Див. Git-scm.com/docs/git-merge#Documentation/… .)
Редагувати:
Моя відповідь нижче документів спосіб злиття master
в aq
, де , якщо ви переглянути деталі злиття в ньому перераховані зміни , внесені в aq
до злиття, а не зміна , зроблені на master
. Я зрозумів, що це, мабуть, не те, чого ти хочеш, навіть якщо ти думаєш, що це!
Просто:
git checkout aq
git merge master
добре.
Так, це просте злиття покаже, що зміни master
, внесені aq
в цей момент, а не навпаки; але це нормально - адже саме так і сталося! Пізніше, коли ви, нарешті, об'єднаєте свою філію master
, саме тоді злиття нарешті покаже всі ваші зміни, що були зроблені master
(що саме ви хочете, і це зобов'язання, де люди в будь-якому випадку очікують знайти цю інформацію).
Я перевірив, і підхід, наведений нижче, також показує точно такі ж зміни (усі зміни, внесені aq
після початкового розбиття між aq
та master
), як і звичайний підхід, наведений вище master
. Тому я думаю, що єдиним його реальним недоліком (окрім того, що надмірно складний і нестандартний ...: - /) є те, що якщо ви повернете назад n останніх змін, git reset --hard HEAD~<n>
і це пройде повз об'єднання, версія нижче відкочується назад "неправильна" гілка, яку потрібно виправити вручну (наприклад, за допомогою git reflog
& git reset --hard [sha]
).
[Отже, те, що я раніше вважав, це:]
Виникла проблема з:
git checkout aq
git merge master
тому що зміни, показані в комісії злиття (наприклад, якщо ви шукаєте зараз чи пізніше в Github, Bitbucket або вашому улюбленому місцевому переглядачі історії git), це зміни, внесені в master, які, можливо, не є такими, які ви хочете.
З іншої сторони
git checkout master
git merge aq
показує зміни, внесені в aq, що, ймовірно, саме те, що ви хочете. (Або, принаймні, це часто те, що я хочу!) Але злиття, що показує правильні зміни, знаходиться на неправильній гілці!
Як впоратися ?!
Повний процес, що закінчується об'єктом злиття, що показує зміни, внесені на aq (відповідно до другого злиття вище), але злиттям, що впливає на aq гілку, є:
git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq
Це: зливає aq на master, швидко пересилає той самий злиття на aq, скасовує його на master і знову повертає вас на aq!
Я відчуваю, що мені чогось не вистачає - це, здається, щось, чого ви, очевидно, хочете, і те, що важко зробити.
Також база даних НЕ еквівалентна. Він втрачає часові позначки та ідентичність комітетів, зроблених на aq, що теж не те, що я хочу.
Сценарій:
Рішення
git stash // to save all existing changes in local branch
git checkout master // Switch to master branch from branch-1
git pull // take changes from the master
git checkout branch-1 // switchback to your own branch
git rebase master // merge all the changes and move you git head forward
git stash apply // reapply all you saved changes
Ви можете знайти конфлікти у вашому файлі після виконання "git stash apply". Виправити це потрібно вручну, і тепер ви готові натиснути.