Corri um git pull
que terminou em um conflito. Resolvi o conflito e agora está tudo bem (usei o mergetool também).
Ao confirmar o arquivo resolvido, git commit file.php -m "message"
recebo o erro:
fatal: cannot do a partial commit during a merge.
Eu tive o mesmo problema antes e usar o -a
commit funcionou perfeitamente. Acho que não é o caminho perfeito, porque não quero confirmar todas as alterações. Quero confirmar arquivos separadamente com comentários separados. Como eu posso fazer isso? Por que o git não permite que os usuários confirmem arquivos separadamente após uma mesclagem? Não consegui encontrar uma resposta satisfatória para esse problema.
Respostas:
Eu descobri que adicionar "-i" ao comando commit corrige esse problema para mim. O -i basicamente diz para preparar arquivos adicionais antes de confirmar. Isso é:
fonte
Stage additional files
significa isso ?git add
, o que causagit commit
falha. Adicionar-i
diria ao git para adicionar e confirmar ao mesmo tempo. Ainda não sei por que, mas parece fazer sentido.Isso funcionou para mim. Você pode tentar isso também.
fonte
Você pode usar
git commit -i
na maioria dos casos, mas caso não funcioneVocê precisa fazer
git commit -m "your_merge_message"
. Durante um conflito de mesclagem, você não pode mesclar um único arquivo, portanto, é necessáriogit add your_file.txt
)git commit -m "your_merge_message"
fonte
Você provavelmente tem um conflito em algo que você não preparou para confirmar. O git não permitirá que você cometa as coisas de forma independente (porque tudo faz parte da mesclagem, eu acho), então você precisa
git add
desse arquivo e depoisgit commit -m "Merge conflict resolution"
. A-i
bandeira paragit commit
faz a adição para você.fonte
commit -i
funcionou, mas nãogit add; git commit
Consegui isso quando esqueci o
-m
commit no meu git ao resolver um conflito de mesclagem do git.deveria estar
fonte
Como diz a mensagem de erro, você não pode fazer uma confirmação parcial após uma mesclagem. Em vez de confirmar,
file.php
você deve confirmar todas as alterações.Isso deve funcionar.
fonte
Sua mesclagem parou no meio da ação. Você deve adicionar seus arquivos e, em seguida, 'git commit':
git add file_1.php file_2.php file_3.php git commit
Felicidades
fonte
Se você deseja apenas abandonar toda a seleção de cereja e confirmar arquivos nos conjuntos que desejar,
leva você até lá.
O que a reinicialização suave faz é mover o ponteiro apontando para HEAD atual para o commit (ish) que você forneceu, mas não altera os arquivos. A redefinição física moveria o ponteiro e também reverteria todos os arquivos para o estado em que commit (ish). Isso significa que, com a reinicialização suave, você pode limpar o status de mesclagem, mas manter as alterações nos arquivos reais e, em seguida, confirmar ou redefinir cada um individualmente, conforme sua preferência.
fonte
fonte
Para mim, isso aconteceu no SourceTree quando tentei confirmar uma mesclagem antes de resolver todos os arquivos. Marquei o último arquivo resolvido e, no entanto, ele ainda me deu esse erro ao tentar confirmar. Fechei o SourceTree e o reabri, e então ele se comprometeu muito bem.
fonte
Eu resolvi isso com uma abordagem completamente diferente, usando apenas o Source Control do Xcode.
Background: Outra equipe Pushed muda para o repositório Git remoto (via Beanstalk). No meu final, os arquivos .xcodeproj entraram em um diretório diferente e as alterações não foram necessárias. Mais tarde, quando tentei confirmar, recebi um erro de Conflito em árvore no Xcode.
Sendo quase impossível corrigir usando o Xcode, substituí o
.xcodeproj
arquivo por uma versão baixada do servidor Git. O resultado ... o projeto Xcode pareceu esclarecer, no entanto, todas as atualizações do Pull corrompido estavam aparecendo como alterações que eu fiz e foram preparadas para um commit.No entanto, ao tentar confirmar, recebi o mesmo erro "fatal: não é possível fazer uma confirmação parcial durante uma mesclagem", discutido aqui.
Aqui está como eu resolvi o problema ... (Agora, entenda que sou um programador novato, para que eu não tenha um certo entendimento ... mas minha ignorância me levou a encontrar outra maneira de fazer isso.) Primeiro, eu clonei meu mestre Ramifique em uma ramificação secundária e alterne para essa ramificação. Em seguida, criei uma cópia de trabalho e coloquei o diretório nessa cópia de trabalho fora do diretório de projeto original. (Não sei se isso foi necessário, mas foi o que fiz ao ler outras técnicas de solução de problemas.) Depois, troquei as ramificações para o mestre, onde percebi que todos os meus arquivos em estágios (alterações em Confirmar) haviam desaparecido. Para garantir que todos os arquivos foram atualizados para as alterações mais recentes feitas pela outra parte, criei um novo ramo chamado ThirdBranch, que duplicou todos os arquivos, Enviei para o Git Server e permiti que o Beanstalk compare minha versão do servidor da ramificação principal com a ramificação ThirdBrach que eu acabei de empurrar (linha por linha), e todas as alterações da outra parte estavam presentes no meu Xcode. Isso significava que meu repositório principal e o repositório principal do Git eram os mesmos, o que verifica se eu resolvi o problema usando apenas o Xcode.
Não me pergunte como, além do que acabei de descrever ... e certamente preencha as lacunas que deixei de fora. Sou novo nisso e não entendo tudo. Talvez um programador experiente possa separar as informações irrelevantes das relevantes e recriar essa técnica mais claramente, e é em parte por isso que estou postando isso.
Esta é uma resposta duplicada para a pergunta duplicada como em: Falha na mesclagem do Xcode Git está bloqueada
fonte
Durante uma mesclagem, o Git deseja acompanhar as ramificações principais por todos os tipos de razões. O que você quer fazer não é uma fusão como o git vê. Você provavelmente desejará fazer uma nova refazer ou selecionar manualmente.
fonte
git commit -i -m 'merge message'
não funcionou para mim. Dizia:fatal: No paths with --include/--only does not make sense.
FWIW, cheguei aqui por meio dessa pergunta relacionada porque estava recebendo esta mensagem:
fatal: You have not concluded your merge (MERGE_HEAD exists).
Eu também tentei o mergetool, que dizia
No files need merging
. Muito confuso! Portanto, o MERGE_HEAD não está em um arquivo que precisa ser mesclado - ??Por fim, usei esse truque para adicionar apenas os arquivos modificados (não quis adicionar todos os arquivos da minha árvore, pois tenho alguns que quero manter não rastreados):
git ls-files -m | xargs git add
Então, finalmente, consegui (!) Me comprometer e avançar. Com certeza seria bom se o git lhe desse dicas melhores sobre o que fazer nessas situações.
fonte
Se estiver na Árvore de Origem , devemos marcar explicitamente um arquivo como resolvido após a resolução dos conflitos. Selecione o arquivo que acabou de ser resolvido sem conflitos. Em seguida, Ações -> Resolver conflitos -> Marcar resolvido . Se você tiver vários arquivos, faça o mesmo para todos. Confirme agora.
fonte
Depois de ler todos os comentários. esta foi a minha resolução:
tive que "adicioná-lo" novamente e confirmar:
fonte
Se você estiver usando a árvore de origem ou outra GUI, verifique se todos os arquivos estão marcados (após a mesclagem).
fonte
Às vezes, durante a mesclagem, se surgirem conflitos e houver deltas que precisem de resolução manual. Nesse caso, corrija a resolução manual dos arquivos mencionados.
Agora, se você emitir,
Você verá resultados como
Como você já organizou o commit, basta emitir
E seu commit será feito sem nenhum problema.
fonte