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 um git 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:
# Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params`
Desktop $ cd test
Primeiro, vamos criar a estrutura do repositório
test $ mkdir repo && cd repo && git init && touch file && git add file && git commit -m "msg"
repo $ cd .. && git clone repo repo_clone && cd repo_clone
repo_clone $ echo "text2" >> file && git add file && git commit -m "msg" && cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
Agora estamos no repo_clone e, se você fizer um git pull
, isso gerará conflitos
repo_clone $ git pull origin master
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/anshulgoyal/Desktop/test/test/repo
* branch master -> FETCH_HEAD
24d5b2e..1a1aa70 master -> origin/master
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
Se ignorarmos os conflitos no clone e fizermos mais confirmações no repositório original agora,
repo_clone $ cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
E então fazemos um git pull
, obtemos
repo_clone $ git pull
U file
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'.
Observe que o file
agora está em um estado não imerso e, se fizermos um git status
, podemos ver claramente o mesmo:
repo_clone $ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
(use "git pull" to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file
Portanto, para resolver isso, primeiro precisamos resolver o conflito de mesclagem que ignoramos anteriormente
repo_clone $ vi file
e defina seu conteúdo como
text2
text1
text1
e adicione-o e confirme as alterações
repo_clone $ git add file && git commit -m "resolved merge conflicts"
[master 39c3ba1] resolved merge conflicts