Aqui estão os comandos que usei no ramo principal
git branch experiment
git checkout experiment
Depois, fiz algumas alterações nos meus arquivos, confirmei as alterações e enviei a nova ramificação para o GitHub.
git commit . -m 'changed files'
git push -u origin experiment
Mais tarde, decidi mesclar meu ramo de experimento no ramo mestre.
git checkout master
git merge experiment
Finalmente, enviei as alterações para o GitHub.
git push -u origin master
Tudo correu bem até que eu tentei excluir minha ramificação do experimento usando
git branch -d experiment
Recebi a mensagem de erro error: The branch 'experiment' is not fully merged.
: sou um pouco novo em git e não sei quanto mais poderia mesclar os dois ramos. O que estou perdendo aqui?
git
git-branch
mellowsoon
fonte
fonte
git commit --amend
squash
: stackoverflow.com/q/41946475/109941 #Respostas:
Nota O texto foi alterado em resposta aos comentários. Obrigado @slekse
Isso não é um erro, é um aviso. Isso significa que o ramo que você está prestes a excluir contém confirmações que não são acessíveis a partir de nenhum dos seguintes: seu ramo upstream ou HEAD (revisão com check-out atualmente). Em outras palavras, quando você pode perder commits¹.
Na prática, isso significa que você provavelmente alterou, reformulou ou filtrou confirmações e elas não parecem idênticas.
Portanto, você pode evitar o aviso consultando uma ramificação que contém as confirmações sobre as quais você não faz referência excluindo a outra ramificação.²
Você deseja verificar se na verdade não está perdendo nenhum commit vital:
Isso fornecerá uma lista de todos os não compartilhados entre os ramos. Caso você esteja curioso, pode haver uma diferença sem
--cherry-pick
e essa diferença pode ser a razão do aviso que você recebe:¹ são realmente apenas lixo coletado depois de um tempo, por padrão. Além disso, o
git-branch
comando não verifica a árvore de revisão de todas as ramificações . O aviso existe para evitar erros óbvios.² (Minha preferência aqui é forçar apenas a exclusão, mas você pode ter a garantia extra).
fonte
Como Drew Taylor apontou, a exclusão da ramificação com -d considera apenas o HEAD atual para determinar se a ramificação está "totalmente mesclada". Ele reclamará mesmo que o ramo seja mesclado com outro ramo. A mensagem de erro pode definitivamente ser mais clara a esse respeito ... Você pode fazer o checkout do ramo mesclado antes de excluir ou simplesmente usar o git branch -D. O capital -D substituirá inteiramente o cheque.
fonte
origin/master
?) Acho que o check-outorigin/master
primeiro não é muito oneroso, mas parece um fluxo estranho - por que preciso verificarorigin/master
localmente só para você verificar se minhas alterações foram mescladas aí?Eu tentei a resposta de ela e não funcionou.
Para encontrar os commits que não foram mesclados, basta usar:
fonte
Isso aconteceu comigo hoje, quando eu estava mesclando meu primeiro ramo de recursos novamente no master. Como alguns disseram em um tópico em outro lugar no SO, o truque foi voltar ao mestre antes de tentar excluir o ramo. De volta ao master, o git ficou feliz em excluir o ramo sem nenhum aviso.
fonte
O Git está avisando que você pode perder o histórico excluindo este ramo. Mesmo que na verdade não exclua nenhuma confirmação imediatamente, algumas ou todas as confirmações na ramificação se tornarão inacessíveis se elas também não fizerem parte de outra ramificação.
Para que a ramificação
experiment
seja "totalmente mesclada" em outra ramificação, seu commit de dica deve ser um ancestral da dica do outro branch, fazendo com que o commit seja feito emexperiment
um subconjunto do outro branch. Isso torna seguro excluirexperiment
, pois todas as confirmações permanecerão parte do histórico do repositório por meio de outra ramificação. Ele deve ser mesclado "totalmente", porque já pode ter sido mesclado várias vezes, mas agora foram adicionados commit desde a última mesclagem que não está contida no outro ramo.O Git não verifica todos os outros ramos do repositório; só dois:
O "ramo upstream" para
experiment
, como no seu caso, é provavelmenteorigin/experiment
. Seexperiment
for totalmente mesclado no ramo atual, o Git o excluirá sem reclamação. Se não estiver, mas estiver totalmente mesclado em sua ramificação upstream, o Git continuará com um aviso parecido com:Onde
xxxxxxxx
indica um ID de confirmação. Ser totalmente mesclado no upstream indica que as confirmaçõesexperiment
foram enviadas para o repositório de origem, para que, mesmo que você as perca aqui, elas possam pelo menos ser salvas em outro lugar.Como o Git não verifica outros ramos, pode ser seguro excluir um ramo porque você sabe que ele está totalmente mesclado em outro; você pode fazer isso com a
-D
opção indicada, ou alternar para esse ramo primeiro e deixar o Git confirmar o status totalmente mesclado para você.fonte
para ver alterações que não são mescladas, fiz o seguinte:
Nota: Isso mostra alterações nas
master
quais não estãoexperiment
.Não esqueça de:
Quando você terminar de olhar.
fonte
man git-reset
e os comandos git reset sejam suficientes para se recuperar de problemas de estado.Solução mais fácil com explicação (solução verificada duas vezes) (enfrentou o problema antes)
O problema é:
1- Não consigo excluir um ramo
2- O terminal continua exibindo uma mensagem de aviso de que existem algumas confirmações ainda não aprovadas
3- sabendo que verifiquei o master e o branch e eles são idênticos (atualizados)
solução:
Explicação:
quando sua ramificação estiver conectada à ramificação remota upstream (no Github, bitbucket ou qualquer outra coisa), você precisará mesclá-la (push) no master e enviar as novas alterações (confirmações) ao repositório remoto (Github, bitbucket ou seja qual for) do ramo,
o que fiz no meu código é que mudei para mestre e, em seguida, mesclei a ramificação (para garantir que sejam idênticas na sua máquina local), depois mudei para a ramificação novamente e coloquei as atualizações ou alterações no controle remoto on-line repo usando "git push".
depois disso, mudei para o mestre novamente e tentei excluir a ramificação, o problema (mensagem de aviso) desapareceu e a ramificação foi excluída com êxito
fonte
Você pode simplesmente descobrir:
--cherry
opção é sinônimo de--right-only --cherry-mark --no-merges
A página de manual do git-log disse
PARA SUA INFORMAÇÃO.
--cherry-pick
omite confirmações equivalentes, mas--cherry-marks
não. É útil encontrar uma reformulação e forçar alterações atualizadas entre o ramo público upstream e colaboradorfonte
Eu não tinha o ramo upstream no meu git local. Eu criei uma filial local a partir do master, git checkout -b mybranch. Criei uma ramificação com a GUI do bitbucket no git upstream e empurrei minha ramificação local (mybranch) para essa ramificação upstream. Depois de fazer uma busca no git no git local para recuperar a ramificação upstream, eu poderia fazer uma ramificação git -d mybranch.
fonte
Acredito que a bandeira
--force
é o que você realmente está procurando. Basta usargit branch -d --force <branch_name>
para excluir o ramo à força.fonte