Mesclando 2 filiais no GIT


131

Eu apenas comecei a usar o GIT e acho maravilhoso, no entanto, estou um pouco confuso com o que o mergecomando faz.

Digamos que temos um projeto de trabalho no ramo "A".

Vou para casa e faço alterações nesse ramo e o salvo como "B". Outro programador faz alterações em "A" e o salva como "C".

Existe uma maneira de mesclar os dois ramos "B" e "C" juntos, depois confirmar as alterações como um novo ramo, diga "D"?

Ou estou perdendo o ponto de 'mesclar'?


não é necessário "salvar alterações" em outro ramo. trabalhar um A e em seguida, mesclar os diferentes de um conjunto
knittl

Eu não sigo. A estaria no meu computador local, o dev1 teria uma cópia de A no computador e o dev2 teria uma cópia de A no computador. Ambos os desenvolvedores fazem alterações, como faço para mesclar essas alterações?
00

consulte < kernel.org/pub/software/scm/git/docs/git-pull.html >. os devs provavelmente precisará push / carregar seu lugar repositório primeiro
knittl

Respostas:


196

merge é usado para reunir dois (ou mais) ramos.

um pequeno exemplo:

# 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"

então agora existem três ramos separados (a saber AB e C) com cabeças diferentes

para obter as alterações de B e C de volta para A, faça checkout A (já feito neste exemplo) e use o comando mesclar:

# create an octopus merge
$ git merge B C

sua história ficará assim:

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

se você deseja mesclar as fronteiras do repositório / computador, consulte o git pullcomando, por exemplo, do PC com a ramificação A (este exemplo criará dois novos commits):

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

isso significa que os dois ramos mudaram o mesmo trecho de código. arrumar as conflitcs, git add conflicting_filese depoisgit commit
knittl

Digamos que o arquivo em A contenha a palavra "olá", o A altere para "OLÁ" e B o altere para "Olá, mundo". Qual seria o resultado da mesclagem desses arquivos?
dotty

Opa, quero dizer que B o alterou e C o alterou.
Dotty4 de

tenha cuidado com a palavra 'alterar', que significa algo diferente no git (alterando confirmações existentes). alterar um arquivo 'olá' para 'OLÁ' de um lado e 'Hello World' do outro lado resultará em um conflito de mesclagem
knittl

19
@dotty: Embora o git frequentemente pareça mágico, ele não consegue realmente ler sua mente - se dois ramos fazem duas mudanças diferentes no mesmo conteúdo, apenas um humano pode descobrir como reconciliá-los. Isso é o que é um conflito de mesclagem.
Cascabel

47

Se você deseja mesclar alterações no SubBranch para MainBranch

  1. você deveria estar no MainBranch git checkout MainBranch
  2. em seguida, execute o comando mesclar git merge SubBranch

2
@luckytaxi: Concordo, às vezes menos é mais
Marcelo

Posso desfazer isso?
Yohanelly

0

Caso: se você precisar ignorar a consolidação de mesclagem criada por padrão , siga estas etapas.

Por exemplo, um novo ramo de recurso é retirado do master com 2 confirmações,

  • "Adicionado A", "Adicionado B"

Checkout a new feature_branch

  • "Adicionado C", "Adicionado D"

A ramificação de recursos adiciona duas confirmações ->

  • "Adicionado E", "Adicionado F"

insira a descrição da imagem aqui

Agora, se você deseja mesclar as alterações do feature_branch ao mestre, sente- git merge feature_branchse no mestre.

Isso adicionará todas as confirmações no ramo mestre (4 no mestre + 2 em feature_branch = total 6) + uma consolidação de mesclagem extra semelhante a 'Merge branch 'feature_branch''como o mestre diverge .

Se você realmente precisar ignorar esses commits (aqueles feitos no FB) e adicionar todas as alterações feitas no feature_branch como um único commit como 'Integrated feature branch changes into master', Run git merge feature_merge --no-commit.

Com --no-commit, ele executa a mesclagem e para imediatamente antes de criar uma consolidação de mesclagem. Teremos todas as alterações adicionadas no ramo de recursos agora no master e teremos a chance de criar uma nova consolidação como nossa.

Leia aqui para mais: https://git-scm.com/docs/git-merge

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.