Eu li a seção Ramificação e fusão básicas do livro da comunidade Git.
Então eu segui-lo e criar um ramo: experimental
.
Então eu:
- alternar para o ramo experimental (experimental do git checkout)
- faça um monte de mudanças
- enviá-lo (git commit -a)
- alternar para o ramo principal (mestre do git checkout)
- fazer algumas alterações e confirmar lá
- voltar para experimental (experimental do git checkout)
- mesclar a alteração do mestre para experimental (git merge master)
existem alguns conflitos, mas depois que os resolvi, 'git add myfile'
E agora estou preso, não posso voltar a dominar
quando eu faço
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
e eu fiz:
$ git rebase --abort
Não há rebase em andamento?
e eu fiz :
$ git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
O que posso fazer para voltar ao meu ramo principal?
git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts"
, ele resulta emfatal: cannot do a partial commit during a merge.
. E, é claro, "confirmações parciais" não parecem estar documentadas ou discutidas em nenhum lugar nas páginas do manual do git. Executar umgit merge
após a correção resulta emPlease, commit your changes before you can merge.
que ferramenta de bunda quebrada ...git merge --continue
. Veja minha resposta abaixoRespostas:
Quando houver um conflito durante uma mesclagem, você precisará concluir a consolidação da mesclagem manualmente. Parece que você executou as duas primeiras etapas para editar os arquivos em conflito e executá
git add
-los para marcá-los como resolvidos. Finalmente, você precisa realmente confirmar a mesclagemgit commit
. Nesse ponto, você poderá alternar ramificações novamente.fonte
git commit -am "your commit message"
executar adicionar e confirmar simultaneamente.git commit
funciona. E é melhor usá-lo para obter a mensagem de confirmação de mesclagem padrão preenchida para você. Eu evito o `git commit -am", já que ele substituirá a mensagemgit push
.Com o Git 2.12 (primeiro trimestre de 2017), você terá o comando mais natural:
Veja commit c7d227d (15 de dezembro de 2016) por Jeff King (
peff
) .Consulte commit 042e290 , commit c261a87 , commit 367ff69 (14 de dezembro de 2016) por Chris Packham (
cpackham
) .(Mesclado por Junio C Hamano -
gitster
- na confirmação 05f6e1b , 27 de dezembro de 2016)Consulte as notas de versão 2.12 .
fonte
Caso você fique preso durante uma mesclagem / rebase, poderá sempre
para restaurar seu trabalho para o estado da última confirmação. Isso perderá as alterações da árvore de trabalho, portanto, se você tiver modificações locais antes da mesclagem, elas serão eliminadas depois disso - é por isso que é aconselhável não iniciar uma mesclagem quando você tiver modificações locais. :)
fonte
git reset --hard
joga mudanças embora não confirmadasgit merge --abort
, que não corre o risco de perder nada?Apenas
git commit
isso.Opcionalmente
git abort
:encontrei um conflito de mesclagem. Como posso interromper a mesclagem?
Para facilitar a vida com as fusões, instale o kdiff3 e configure-o como uma ferramenta de fusão. Instruções: http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/
Essa página contém este vídeo: https://www.youtube.com/watch?v=Cc4xPp7Iuzo
fonte
Sempre que você mesclar duas ramificações usando o comando
git merge brancha branchb
, existem duas possibilidades:Um ramo (digamos brancha) pode ser alcançado pelo outro ramo (digamos branchb) seguindo seu histórico de confirmações. Nesse caso, o git simplesmente avança rapidamente a cabeça para apontar para o ramo recente (neste caso, branchb).
2.Mas se as duas ramificações divergirem em algum momento anterior, o git cria uma nova captura instantânea e adiciona uma nova confirmação que aponta para ela. Portanto, caso não haja conflito entre as ramificações que você está mesclando, o git cria uma nova confirmação sem problemas.
Agora voltando ao caso interessante, quando há conflitos de mesclagem entre as ramificações mescladas. Cito isso na página https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
Portanto, no caso de haver conflitos de mesclagem, é necessário resolvê-lo e, em seguida, adicionar as alterações feitas na área de preparação,
git add filename
e confirmar as alterações usando o comandogit commit
que foi pausado pelo git por causa do conflito. inquerir. Visite também o link acima para uma compreensão detalhada. Em caso de qualquer dúvida, por favor, comente abaixo, teremos prazer em ajudar.fonte
As próximas etapas após a resolução manual dos conflitos são: -
git merge --continue
,git cherry-pick --continue
,git rebase --continue
]fonte
error: Failed to merge in the changes. Patch failed at 0001 ADD: _type to styleguide The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".
git merge --continue
, que é o que estou tentando fazer, resultaerror: unknown option 'continue'
. Estou certo de que sua resposta está errada, pois agit-merge
página de manual não a lista. Qual versão do Git você está usando? Eu estou usandogit version 1.8.5.2 (Apple Git-48)
. Eu também tentei com o MacPortsgit version 2.9.3
.git commit
Um conflito de mesclagem ocorre quando dois ramos que você está tentando mesclar alteram a mesma parte do mesmo arquivo. Você pode gerar uma lista de conflitos com
git status
.Quando a linha em conflito é encontrada, o Git edita o conteúdo dos arquivos afetados com indicadores visuais que marcam os dois lados do conteúdo conflitante.
Quando você corrige seus arquivos em conflito e está pronto para mesclar, tudo o que você precisa fazer é executar
git add
egit commit
gerar a consolidação de mesclagem. Depois que a confirmação foi feita,git push
as alterações na ramificação.Artigo de referência: Git merge .
fonte
Depois que todos os arquivos foram adicionados, o próximo passo é um " git commit ".
"git status" sugerirá o que fazer: os arquivos ainda a serem adicionados são listados na parte inferior e, quando todos estiverem prontos, sugerirá um commit na parte superior, onde explica o status de mesclagem da ramificação atual.
fonte
A primeira coisa que quero esclarecer é que os nomes das ramificações são apenas um alias para um commit específico. um commit é o que o git funciona, quando você puxa, empurra a mesclagem e assim por diante. Cada confirmação tem um ID exclusivo.
Quando você faz a mesclagem $ git, o que realmente está acontecendo é que o git tenta avançar rapidamente sua ramificação atual para a confirmação da ramificação referenciada (em outras palavras, os nomes de duas ramificações apontam para a mesma confirmação.) Esse cenário é o mais fácil para o git para lidar, já que não há novo commit. Pense no mestre pulando no lilipad em que seu ramo está relaxando. É possível definir o sinalizador --no-ff; nesse caso, o git criará um novo commit, independentemente de haver algum conflito de código.
Em uma situação em que há conflitos de código entre as duas ramificações que você está tentando mesclar (geralmente duas ramificações cujo histórico de consolidação compartilham uma consolidação comum no passado), o avanço rápido não funcionará. O git ainda poderá mesclar os arquivos automaticamente, desde que a mesma linha não tenha sido alterada pelos dois ramos em um arquivo em conflito. nesse caso, o git mesclará os arquivos conflitantes para você e os confirmará automaticamente. Você pode visualizar como o git se saiu fazendo $ git diff --cached. Ou você pode passar o sinalizador --no-commit para o comando mesclar, que deixará os arquivos modificados no seu índice e você precisará adicionar e confirmar. Mas você pode $ git diff esses arquivos para revisar o que a mesclagem mudará.
O terceiro cenário é quando há conflitos que o git não pode resolver automaticamente. Nesse caso, você precisará mesclá-los manualmente. Na minha opinião, é mais fácil fazer uma mesclagem, como araxis merge ou p4merge (grátis). De qualquer maneira, você deve fazer cada arquivo um por um. Se a mesclagem parecer travada, use $ git merge --continue, para acompanhá-la. O Git deve dizer se não pode continuar e, se sim, por que não. Se você sentir que perdeu a mesclagem em algum momento, poderá fazer a mesclagem $ git --abort, e qualquer fusão será desfeita e você poderá começar de novo. Quando terminar, cada arquivo que você mesclou será um arquivo modificado que precisará ser adicionado e confirmado. Você pode verificar onde os arquivos estão com o status $ git. Se você ainda não confirmou os arquivos mesclados. Você precisa fazer isso para concluir a mesclagem.
fonte
Pode ser tarde. Isso acontece porque o seu git HEAD não é atualizado. esse elogio resolveria isso
git reset HEAD
.fonte