Eu tenho um repositório git com várias ramificações.
Como posso saber quais ramificações já foram mescladas na ramificação mestre?
git branch --merged master
lista ramificações mescladas no mestre
git branch --merged
lista ramificações fundidas em HEAD (ou seja, dica da ramificação atual)
git branch --no-merged
lista ramificações que não foram mescladas
Por padrão, isso se aplica apenas às ramificações locais. O -a
sinalizador mostrará ramificações locais e remotas, e -r
mostrará apenas as ramificações remotas.
git branch --merged
e excluí as ramificações local e remota.git branch -a --merged/no-merged
também funciona, sem criar uma filial de rastreamento local no processo.git branch -r --merged/--no-merged
para encontrar apenas ramificações remotas.--merged/--no-merged
recebe um argumento de confirmação opcional depois dele. Pelo menos na minha versão do git (1.9.1), adicionar o sinalizador-a
ou-r
depois dele gera um erro fatal. Adicione o-a
ou-r
antes--(no-)merged
.Você pode usar o
git merge-base
comando para encontrar o último commit comum entre os dois ramos. Se esse commit for igual ao seu chefe de ramificação, ele será completamente mesclado.fonte
git branch -d
se recusará a excluir um ramo que não foi mesclado no ramo atual. Não está excluindo a ramificação atual .Também existe uma solução de interface gráfica. Apenas digite
gitk --all
Uma nova janela do aplicativo solicitará uma representação gráfica de todo o seu repositório, onde é muito fácil perceber se um ramo já foi mesclado ou não
fonte
git
cliente. No Ubuntuapt-get install gitk
,.brew install git-gui
, para entrargitk
na linha de comando.Estou usando a seguinte função bash como:
git-is-merged develop feature/new-feature
fonte
Use
git merge-base <commit> <commit>
.Este comando encontra os melhores ancestrais comuns entre dois commits. E se o ancestral comum for idêntico ao último commit de um "branch", podemos assumir com segurança que um "branch" já foi mesclado no master.
Aqui estão os passos
git merge-base <commit-hash-step1> <commit-hash-step2>
.Mais informações sobre git merge-base https://git-scm.com/docs/git-merge-base .
fonte
master
foi mescladobranch
e mais quatro confirmações foram adicionadasbranch
.git log -1 $(git merge-base base-branch feature-branch)
e se você vêfeature-branch
na saída, sabe que eles são mesclados?Sobre o tópico de limpeza de filiais remotas
Isso lista cada ramificação remota seguida pelas ramificações remotas em que os SHAs mais recentes estão.
Isso é útil para discernir quais ramificações remotas foram mescladas, mas não excluídas, e quais não foram mescladas e, portanto, estão se deteriorando.
Se você estiver usando 'tig' (é como o gitk, mas baseado em terminal), poderá
para ver o histórico de consolidação de uma ramificação sem precisar sair do git
fonte
Para verificar quais ramificações são mescladas no mestre, você deve usar estes comandos:
git branch <flag[-r/-a/none]> --merged master
lista de todos os ramos mesclados no mestre.git branch <flag[-r/-a/none]> --merged master | wc -l
número de contagem de todas as ramificações mescladas no mestre.Os sinalizadores são:
-a
flag - (todos) mostrando ramificações remotas e locais-r
flag - (remoto) mostrando apenas ramificações remotas<emptyFlag>
- mostrando apenas filiais locaispor exemplo:
git branch -r --merged master
mostrará todos os repositórios remotos mesclados no master.fonte
Aqui estão minhas técnicas quando preciso descobrir se uma ramificação foi mesclada, mesmo que possa ter sido reestruturada para estar atualizada com a ramificação principal, que é um cenário comum para ramificações de recursos.
Nenhuma dessas abordagens é à prova de idiotas, mas eu as achei úteis muitas vezes.
1 Mostrar log para todas as filiais
Usando uma ferramenta visual como gitk ou TortoiseGit, ou simplesmente git log com --all, percorra o histórico para ver todas as mesclagens na ramificação principal. Você poderá identificar se esse ramo de recurso específico foi mesclado ou não.
2 Sempre remova a ramificação remota ao mesclar em uma ramificação de recurso
Se você costuma remover sempre as ramificações local e remota ao mesclar uma ramificação de recurso, basta atualizar e remover controles remotos no outro computador, e as ramificações de recursos desaparecem.
Para ajudar a lembrar de fazer isso, eu já estou usando extensões de fluxo git (edição AVH) para criar e mesclar minhas ramificações de recursos localmente, então adicionei o seguinte gancho de fluxo git para me perguntar se eu também quero remover automaticamente a ramificação remota.
Ramificação de recurso de criação / conclusão de exemplo
.git / hooks / post-flow-feature-finish
3 Pesquise por mensagem de confirmação
Se você nem sempre remover a ramificação remota, ainda poderá procurar confirmações semelhantes para determinar se a ramificação foi mesclada ou não. A armadilha aqui é se a ramificação remota foi redimensionada para o irreconhecível, como esmagar confirmações ou alterar mensagens de confirmação.
Comandos de exemplo na ramificação principal:
Na minha configuração bash .profile
fonte
git log --all --color --graph --decorate --topo-order --date=relative --abbrev-commit --pretty=format:"%C(green)%h %C(red bold)[%<(14)%ad] %Creset%s%Cred%d%C(blue) [%an]"
git log
você pode adicionar--merges
apenas para mostrar confirmações de mesclagem. stackoverflow.com/a/25986615/134761Aqui está uma pequena linha que permitirá que você saiba se sua filial atual incorpora ou está sem dados de uma origem / filial remota:
Me deparei com essa pergunta ao trabalhar em um ramo de recursos e frequentemente querendo ter certeza de que o trabalho mais recente foi incorporado ao meu próprio ramo de trabalho separado.
Para generalizar esse teste, adicionei o seguinte alias ao meu ~ / .gitconfig:
Então eu posso ligar para:
para verificar se eu sou atual.
fonte