Quando tento extrair o diretório do meu projeto no terminal, vejo o seguinte erro:
harsukh@harsukh-desktop:~/Sites/branch1$ git pull origin master
U app/config/app.php
U app/config/database.php
U app/routes.php
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
Por que o git diz "Pull is not possible because you have unmerged files"
e como posso resolvê-lo?
git
git-pull
merge-conflict-resolution
git-fetch
Harsukh Makwana
fonte
fonte
Respostas:
O que está acontecendo atualmente é que você possui um determinado conjunto de arquivos que tentou mesclar anteriormente, mas eles geraram conflitos de mesclagem. Idealmente, se alguém tiver um conflito de mesclagem, ele deve resolvê-los manualmente e confirmar as alterações usando
git add file.name && git commit -m "removed merge conflicts"
. Agora, outro usuário atualizou os arquivos em questão em seu repositório e transferiu suas alterações para o repositório upstream comum.Acontece que seus conflitos de mesclagem (provavelmente) da última confirmação não foram resolvidos; portanto, seus arquivos não são mesclados corretamente e, portanto, o sinalizador
U
(unmerged
) para os arquivos. Então agora, quando você faz umgit pull
, o git está exibindo o erro, porque você tem alguma versão do arquivo, que não foi resolvida corretamente.Para resolver isso, você precisará resolver os conflitos de mesclagem em questão e adicionar e confirmar as alterações antes de poder fazer a
git pull
.Reprodução de amostra e resolução do problema:
Primeiro, vamos criar a estrutura do repositório
Agora estamos no repo_clone e, se você fizer um
git pull
, isso gerará conflitosSe ignorarmos os conflitos no clone e fizermos mais confirmações no repositório original agora,
E então fazemos um
git pull
, obtemosObserve que o
file
agora está em um estado não imerso e, se fizermos umgit status
, podemos ver claramente o mesmo:Portanto, para resolver isso, primeiro precisamos resolver o conflito de mesclagem que ignoramos anteriormente
e defina seu conteúdo como
e adicione-o e confirme as alterações
fonte
Você está tentando adicionar mais uma nova confirmação em sua filial local enquanto o diretório de trabalho não está limpo. Como resultado, o Git se recusa a fazer o pull. Considere os seguintes diagramas para visualizar melhor o cenário:
Existem duas opções para lidar com essa situação. Você pode descartar as alterações em seus arquivos ou retê-las.
Opção um: Jogue fora as alterações
Você pode usar
git checkout
para cada arquivo não mesclado ougit reset --hard HEAD
redefinir todos os arquivos em sua ramificação para HEAD. A propósito, HEAD em sua filial local é B, sem um asterisco. Se você escolher esta opção, o diagrama se tornará:Agora, quando você puxa, pode avançar rapidamente sua ramificação com as alterações do mestre. Depois de puxar, seu ramo ficaria parecido com o mestre:
Opção 2: Reter as alterações
Se você deseja manter as alterações, primeiro deseje resolver qualquer conflito de mesclagem em cada um dos arquivos. Você pode abrir cada arquivo no seu IDE e procurar os seguintes símbolos:
O Git está apresentando duas versões de código. O código contido nos marcadores HEAD é a versão da sua filial local atual. A outra versão é o que vem do controle remoto. Depois de escolher uma versão do código (e remover o outro código junto com os marcadores), você pode adicionar cada arquivo à sua área de preparação digitando
git add
. A etapa final é confirmar seu resultado digitandogit commit -m
com uma mensagem apropriada. Nesse ponto, nosso diagrama se parece com o seguinte:Aqui eu rotulei o commit que acabamos de fazer como C 'porque é diferente do commit C no controle remoto. Agora, se você tentar puxar, receberá um erro de avanço não rápido. O Git não pode reproduzir as alterações no controle remoto em sua ramificação, porque a ramificação e o controle remoto divergiram do commit B. ancestral comum. Nesse ponto, se você deseja puxar, pode fazer outro
git merge
ougit rebase
sua ramificação no controle remoto.Para dominar o Git, é necessário entender e manipular listas vinculadas unidirecionais. Espero que essa explicação faça você pensar na direção certa sobre o uso do Git.
fonte
Existe uma solução simples para isso. Mas para isso você precisará primeiro aprender o seguinte
Para remover conflitos, você pode usar
O comando acima basicamente abre arquivo local, arquivo misto, arquivo remoto (3 arquivos no total), para cada arquivo em conflito. Os arquivos local e remoto são apenas para sua referência e, usando-os, você pode escolher o que incluir (ou não) no arquivo misto. E apenas salve e saia do arquivo.
fonte
Se você não deseja mesclar as alterações e ainda assim deseja atualizar seu local, execute:
Isso redefinirá seu local com HEAD e, em seguida, puxe seu controle remoto usando git pull.
Se você já comprometeu sua mesclagem localmente (mas ainda não passou para remoto) e deseja revertê-la também:
fonte
Se você deseja obter uma ramificação remota para executar localmente (por exemplo, para fins de revisão ou teste) e quando tiver
$ git pull
conflitos de mesclagem local:fonte
Você tem alguns arquivos localmente que precisam ser mesclados antes de poder puxar. Você pode fazer o check-out dos arquivos e puxar para substituir os arquivos locais.
fonte
Passos a seguir:
Obrigado, Sarbasish
fonte
Havia o mesmo problema comigo.
No meu caso, as etapas são as seguintes:
Aqui está a mensagem que apareceu -
e tem 2 e 1 comprometimento diferente cada, respectivamente.
(use "git pull" to merge the remote branch into yours)
Você tem caminhos não imersos.
(fix conflicts and run "git commit")
Caminhos não imersos:
(use "git add ..." para marcar a resolução)
Qual turno pode ser resolvido com esta imagem -
fonte
Quando ocorre um conflito de mesclagem, você pode abrir um arquivo individual. Você receberá os símbolos "<<<<<<< ou >>>>>>>". Referem-se às suas alterações e às alterações presentes no controle remoto. Você pode editar manualmente a peça necessária. depois disso, salve o arquivo e faça: git add
Os conflitos de mesclagem serão resolvidos.
fonte
Basta executar este comando:
fonte