Об’єднання двох відділень у GIT


131

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

Скажімо, у нас є робочий проект у філії «А».

Я йду додому і вношу зміни до цієї гілки і зберігаю її як "B". Інший програміст вносить зміни до "А" і зберігає його як "С".

Чи є спосіб об'єднати дві гілки "B" і "C" разом, а потім здійснити зміни як нову гілку, скажімо "D"?

Або я пропускаю точку "злиття"?


не потрібно «зберігати зміни» в іншій галузі. працюйте з A, а потім
з’єднайте

Я не стежу за цим. A буде на моєму локальному комп’ютері, dev1 матиме копію A на своєму комп’ютері, а dev2 має копію A на своєму комп’ютері. Обидва розробники вносять зміни, як я зливаю ці зміни разом?
крапка

див. < kernel.org/pub/software/scm/git/docs/git-pull.html >. розробникам, ймовірно, потрібно
перенести

Відповіді:


196

merge використовується для об'єднання двох (або більше) гілок.

невеликий приклад:

# on branch A:
# create new branch B
$ git checkout -b B
# hack hack
$ git commit -am "commit on branch B"

# create new branch C from A
$ git checkout -b C A
# hack hack
$ git commit -am "commit on branch C"

# go back to branch A
$ git checkout A
# hack hack
$ git commit -am "commit on branch A"

тому зараз є три окремі гілки (а саме AB і C) з різними головками

щоб повернути зміни з B і C до A, оформити замовлення A (вже зроблено в цьому прикладі), а потім скористатися командою злиття:

# create an octopus merge
$ git merge B C

тоді ваша історія буде виглядати приблизно так:

…-o-o-x-------A
      |\     /|
      | B---/ |
       \     /
        C---/

якщо ви хочете об'єднатись через межі сховища / комп'ютера, перегляньте git pullкоманду, наприклад, з ПК з гілкою A (цей приклад створить два нові коміти):

# pull branch B
$ git pull ssh://host/… B
# pull branch C
$ git pull ssh://host/… C

це означає, що обидві гілки змінили один і той же фрагмент коду. виправити конфлікти, git add conflicting_filesа потімgit commit
knittl

Скажіть, що файл A містив слово "привіт", A змінив його на "HELLO" і B змінив його на "Hello world". Яким буде результат об’єднання цих файлів?
крапка

Уопс, я маю на увазі, що B його змінив, а C доповнив його.
крапка

будьте обережні зі словом "виправити", що означає щось інше в git (зміна існуючих комітетів). зміна файлу 'привіт' на 'HELLO' з одного боку та 'Hello World' на іншій стороні призведе до конфлікту злиття
knittl

19
@dotty: Хоча git часто здається магічним, він насправді не може прочитати ваш розум - якщо дві гілки внести дві різні зміни в один і той же вміст, лише людина може зрозуміти, як їх узгодити. Ось що таке конфлікт злиття.
Каскабель

47

Якщо ви хочете об'єднати зміни в SubBranch з MainBranch

  1. ви повинні бути на MainBranch git checkout MainBranch
  2. потім запустіть команду злиття git merge SubBranch

2
@luckytaxi: Згоден, іноді менше , більше
Марсело Scofano

Чи можу я скасувати це?
Йоханеллі

0

Випадок: Якщо вам потрібно проігнорувати створений за замовчуванням комірок злиття , виконайте ці кроки.

Скажімо, нову гілку функції перевіряється у майстра, який вже має 2 коміти,

  • "Додано A", "Додано B"

Checkout a new feature_branch

  • "Додано C", "Додано D"

Потім гілка функції додає два коміти ->

  • "Додано E", "Додано F"

введіть тут опис зображення

Тепер, якщо ви хочете об'єднати зміни_визначення_від'ємних змін у головне, виконайте git merge feature_branchсидіння за майстром.

Це додасть усі коміти в головну гілку (4 у master + 2 у element_branch = всього 6) + додатковий фільтр злиття чимось на кшталт 'Merge branch 'feature_branch'"у міру розбіжності майстра .

Якщо вам дійсно потрібно ігнорувати ці комітети (ті, які зроблені у FB), і додавати всі зміни, внесені у element_branch, як єдину комісію, наприклад 'Integrated feature branch changes into master', Run git merge feature_merge --no-commit.

З --no-commit, він виконує злиття і зупиняється безпосередньо перед створенням приєднання, ми матимемо всі додані зміни у функції гілки тепер у master та отримаємо шанс створити новий комітет як власний.

Детальніше читайте тут: https://git-scm.com/docs/git-merge

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