Eu tenho dois ramos, a saber, master
e development
em um repositório do GitHub. Estou fazendo todo o meu desenvolvimento no ramo de desenvolvimento, como mostrado.
git branch development
git add *
git commit -m "My initial commit message"
git push -u origin development
Agora eu quero mesclar todas as alterações no development
ramo no master
. Minha abordagem atual é:
git checkout master
git merge development
git push -u origin master
Informe-me se o procedimento que estou seguindo está correto.
git pull -u
define o rastreamento upstream para a ramificação (ou todas as ramificações, se pressionar mais de uma). Uma vez definido, o rastreamento persiste. Não há razão para usá-lo continuamente.Respostas:
Geralmente, gosto de mesclar
master
odevelopment
primeiro para que, se houver algum conflito, eu possa resolver nodevelopment
próprio ramo e meusmaster
restos mortais estejam limpos.Não há muita diferença nas duas abordagens, mas às vezes notei que ainda não quero mesclar a ramificação
master
depois de mesclá-las ou que ainda há mais trabalho a ser feito antes que elas possam ser mescladas , então eu tendem a deixarmaster
intocadas até o material final.EDIT: Dos comentários
Se você quiser acompanhar quem fez a mesclagem e quando, poderá usar o
--no-ff
sinalizador durante a mesclagem para fazer isso. Geralmente, isso é útil apenas ao mesclardevelopment
namaster
(última etapa), pois pode ser necessário mesclarmaster
nadevelopment
(primeira etapa) várias vezes no seu fluxo de trabalho, e criar um nó de confirmação para elas pode não ser muito útil.fonte
--no-ff
para mesclar para dominar para corrigir isso.--no-ff
serve. :)git merge --no-ff development
apenas para corrigir o uso do @ elect.A->B->C
seja mestre eA->X->Y
é seu ramo de desenvolvimento. Se você alterar parte de um arquivo noX
qual pode ter tido conflitos com uma alteraçãoA
, ele não será um conflito, porqueA
é um ancestral deX
. Em relação às alterações perdidas, consulte stackoverflow.com/questions/7147680/… para recuperar as alterações.Pessoalmente, minha abordagem é semelhante à sua, com mais alguns ramos e algumas abalos de commits quando eles voltam ao domínio.
Um dos meus colegas de trabalho não gosta muito de mudar de ramificação e permanece no ramo de desenvolvimento com algo semelhante ao seguinte, todos executados no ramo de desenvolvimento.
A primeira linha garante que ele tenha quaisquer confirmações upstream que foram feitas para dominar desde a última vez em que atualizou seu repositório local.
O segundo puxa essas mudanças (se houver) do mestre para o desenvolvimento
O terceiro empurra o ramo de desenvolvimento (agora totalmente mesclado com o mestre) até a origem / mestre.
Eu posso estar com o seu fluxo de trabalho básico um pouco errado, mas essa é a essência principal.
fonte
rebase
a atualização dodev
ramo em vez demerge
.Explicação de baixo para aqueles que vieram aqui sem nenhum conhecimento de ramos.
Você começa a criar uma nova ramificação desta maneira:
1) Clone o repositório no seu diretório local (ou crie um novo repositório):
2) Crie uma nova ramificação. Ele conterá os arquivos mais recentes do seu repositório de ramificação principal
3) Altere sua ramificação atual do git para new_branch
4) Faça codificação, confirma, como sempre ...
5) Quando o trabalho for concluído neste ramo, mesclar com o ramo "mestre":
Atualização: eu recomendo usar o GitKraken para isso para ver a árvore visual das alterações e ver melhor toda a lógica e confirmações.
fonte
release
ramo nosso dodevelop
. Em seguida, adicionou um arquivo de nota de versão e confirmado. Em seguida, termine o lançamento, que será mesclado novamente aos doismaster/develop
. mas minha ramificação principal só tinha notas de lançamento recém-adicionadas. nenhum outro arquivo durante as confirmações de desenvolvimento anteriores foram atualizados nele.Seria ótimo se você pudesse usar o fluxo de trabalho do Git Flow . Pode mesclar desenvolver ramificações em master facilmente.
O que você quer fazer é seguir as instruções do git-flow mencionadas aqui:
PASSOS:
git flow release start <version_number>
git flow release finish <version_number>
git push
para publicar as alterações no mestre remoto .Para mais informações, visite a página - http://danielkummer.github.io/git-flow-cheatsheet/
fonte
fonte
Sim, isso está correto, mas parece um fluxo de trabalho muito básico, no qual você apenas armazena as alterações antes que elas estejam prontas para a integração. Você deve olhar para fluxos de trabalho mais avançados que o git suporta. Você pode gostar da abordagem de ramificação de tópicos , que permite trabalhar em vários recursos em paralelo, ou a abordagem de graduação que amplia um pouco o fluxo de trabalho atual.
fonte
Se você estiver no Mac ou Ubuntu, vá para a pasta de trabalho da filial. No terminal
suponha que harisdev é o nome da filial.
se houver arquivos não rastreados ou não confirmados, você receberá um erro e precisará confirmar ou excluir todos os arquivos não rastreados ou não confirmados.
Um último comando para excluir a ramificação.
fonte
Passo 1
Crie e alterne para uma nova ramificação "dev", na qual seus arquivos git locais estão sincronizados com o controle remoto, mas a ramificação "dev" ainda não existe.
Passo 2
Faça as alterações no ramo "dev" (atual, se você seguir a etapa 1), confirme e envie-as para o ramo "dev" remoto.
etapa 3
Mesclar seu ramo "dev" no "mestre".
fonte
É assim que eu costumo fazer. Primeiro, verifique se você está pronto para mesclar suas alterações no mestre.
git fetch
git checkout master
.git pull
git merge development
git push -u origin master
e pronto.Você pode descobrir mais sobre a fusão do git no artigo.
fonte
1) No desenvolvimento da filial, verifique o status do git usando o seguinte comando:
Não deve haver código não confirmado. Se estiver, envie seu código no ramo Desenvolvimento:
2) Na ramificação Desenvolvimento, execute os seguintes dois comandos:
Ele enviará o código da ramificação de Desenvolvimento para a ramificação principal.
fonte
-f
não é recomendado.Baseado em @Sailesh e @DavidCulp:
O primeiro comando garantirá que você tenha todas as confirmações upstream feitas no mestre remoto, com a resposta Sailesh que não aconteceria.
O segundo fará uma mesclagem e criará conflitos que você poderá resolver.
Depois de fazer isso, você pode finalmente fazer o checkout do master para mudar para o master.
Em seguida, você mescla a ramificação de desenvolvimento no mestre local. O sinalizador no-ff criará um nó de confirmação no mestre para que toda a mesclagem seja rastreável.
Depois disso, você pode confirmar e empurrar sua mesclagem.
Este procedimento garantirá que haja uma consolidação de mesclagem do desenvolvimento para dominar o que as pessoas podem ver; se elas forem olhar para o ramo de desenvolvimento, poderão ver o comprometimento individual que você fez nesse ramo durante o desenvolvimento.
Opcionalmente, você pode alterar seu commit de mesclagem antes de enviá-lo, se desejar adicionar um resumo do que foi feito no ramo de desenvolvimento.
EDIT: minha resposta original sugeriu um
git merge master
que não fez nada, é melhor fazergit merge FETCH_HEAD
depois de buscar a origem / mestrefonte
Depois de fazer o checkout do ramo de desenvolvimento, você ...
fonte
Se você estiver usando o gerrit, os seguintes comandos funcionarão perfeitamente.
Você pode salvar com a mensagem de confirmação padrão. Verifique se o ID de alteração foi gerado. Você pode usar o seguinte comando para garantir.
Em seguida, pressione com o seguinte comando.
Você pode encontrar uma mensagem de erro como a abaixo.
Para resolver isso, o administrador do projeto gerrit deve criar outra referência no gerrit chamada 'refs / for / refs / heads / master' ou 'refs / for / refs / heads / *' (que abrangerá todas as ramificações no futuro). Em seguida, conceda a permissão 'Push Merge Commit' a essa referência e a permissão 'Submit', se necessário, para enviar o GCR.
Agora, tente o comando push acima novamente e ele deve funcionar.
Créditos:
https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit
https://stackoverflow.com/a/21199818/3877642
fonte
Eu acho que a solução mais fácil seria
Isso também preserva o histórico de todos os ramos em uso
fonte
fonte
pull
novamente. Além disso, não está claro qual valor essa resposta agrega em comparação com as respostas existentes.