Eu sou novo no Git e agora estou nessa situação:
- Eu tenho quatro ramos (mestre, b1, b2 e b3).
- Depois de trabalhar no b1-b3, percebi que havia algo para mudar no mestre de ramificação que deveria estar em todas as outras ramificações.
- Eu mudei o que eu precisava
master
e ... aqui está o meu problema:
Como atualizo todas as outras ramificações com o master
código da ramificação?
git
git-branch
Ionuț Staicu
fonte
fonte
Respostas:
Você tem duas opções:
O primeiro é uma mesclagem, mas isso cria uma confirmação extra para a mesclagem.
Faça checkout em cada filial:
Em seguida, mesclar:
Em seguida, pressione:
Como alternativa, você pode fazer uma nova rebase:
fonte
got push origin master
... não faz sentido. Você não está mudando o ramo principal. Eu acho que é um erro com 119 votos anteriores: /git rebase master
é a resposta corretaVocê tem basicamente duas opções:
Você se funde. Na verdade, isso é bastante simples e uma operação perfeitamente local:
Isso deixa o histórico exatamente como aconteceu: você partiu do mestre, fez alterações em todos os ramos e, finalmente, incorporou as mudanças do mestre nos três ramos.
git
Para lidar com essa situação muito bem, ele foi projetado para mesclagens acontecendo em todas as direções, ao mesmo tempo. Você pode confiar que poderá reunir todos os threads corretamente. Simplesmente não se importa se o branchb1
mesclamaster
oumaster
mesclab1
, o commit de mesclagem parece igual ao git. A única diferença é que ramo acaba apontando para esse commit de mesclagem.Você se rebase. Pessoas com um SVN ou experiência semelhante acham isso mais intuitivo. Os comandos são análogos ao caso de mesclagem:
As pessoas gostam dessa abordagem porque ela mantém uma história linear em todos os ramos. No entanto, essa história linear é uma mentira, e você deve estar ciente de que é. Considere este gráfico de confirmação:
A mesclagem resulta na história verdadeira:
A rebase, no entanto, fornece esse histórico:
O ponto é que os commits
E'
,F'
eG'
nunca realmente existiram e provavelmente nunca foram testados. Eles podem até não ser compilados. Na verdade, é muito fácil criar confirmações sem sentido via rebase, especialmente quando as alteraçõesmaster
são importantes para o desenvolvimentob1
.A conseqüência disso pode ser que você não consegue distinguir qual dos três commits
E
,F
eG
realmente introduziu uma regressão, diminuindo o valor degit bisect
.Não estou dizendo que você não deveria usar
git rebase
. Tem seus usos. Mas sempre que você o usa, precisa estar ciente do fato de estar mentindo sobre a história. E você deve pelo menos compilar o teste que os novos commits.fonte
git checkout <source branch>
git pull
. Continuando com o acima:git checkout b1
...git merge
egit rebase
. Não há como evitar isso.git rebase
tem a vantagem de permitir ocultar vários estágios de rebaseamento (ou seja, rebaseando o mesmo ramo em vários commits diferentes em sequência para reduzir a quantidade de conflitos em cada estágio). No entanto, o simples fato de uma rebase estar mentindo sobre a história torna muito mais fácil foder bem em uma rebase de vários estágios ... É por isso que eu sempre prefiro a mesclagem, mesmo quando isso significa que eu preciso desordenar a história com vários commits de mesclagem .git rebase master
é a maneira correta de fazer isso. A mesclagem significaria que uma consolidação seria criada para a mesclagem, enquanto a reestruturação não seria.fonte
Se você estiver trabalhando em uma ramificação de vez em quando, ou muita coisa aconteceu em outras ramificações enquanto estiver trabalhando em alguma coisa, é melhor refazer sua ramificação para mestre. Isso mantém a história organizada e facilita muito o acompanhamento.
Notas:
Há um capítulo sobre rebasing em http://git-scm.com/book/ch3-6.html e muitos outros recursos disponíveis na web.
fonte
A @cmaster fez a melhor resposta elaborada. Em resumo:
Você não deve reescrever o histórico da ramificação, mas mantê-los no estado real para referências futuras. Ao mesclar para o mestre, ele cria um commit extra, mas isso é barato. Confirma não custa.
fonte
Para atualizar outras ramificações como (backup) com sua cópia da ramificação principal. Você pode seguir de qualquer maneira (rebase ou mesclagem) ...
Mesclar ramificações (haverá uma confirmação extra automaticamente na ramificação de backup).
Nota: Rebase nada mais é do que estabelecer uma nova base (uma nova cópia)
(Repita para outras ramificações, se houver, como backup2 & etc ..,)
(Repita para outras ramificações, se houver, como backup2 & etc ..,)
fonte
Você pode mesclar ou aplicar confirmações individuais nas ramificações usando git cherry-pick .
fonte
Existem duas opções para esse problema.
1) git rebase
2) fusão do git
Somente diff acima de ambos em caso de mesclagem, terá confirmação extra no histórico
1) ramo de verificação geral do git (b1, b2, b3)
2) origem / mestre do git rebase (no caso de conflitos serem resolvidos localmente, fazendo o git rebase --continue)
3) git push
Como alternativa, a opção git merge é semelhante
1) git checkout "your_branch" (b1, b2, b3)
2) mestre de mesclagem git
3) git push
fonte
para atualizar sua filial do mestre:
fonte