Eu suspeito que você está confuso aqui porque é fundamentalmente confuso. Para piorar as coisas, todo o nosso / o deles troca de papéis (fica para trás) quando você está fazendo uma nova revisão.
Em última análise, durante uma git merge
, o ramo "nosso" refere-se ao ramo que você está fundindo em :
git checkout merge-into-ours
e o ramo "deles" refere-se ao ramo (único) que você está mesclando:
git merge from-theirs
e aqui "nosso" e "deles" faz algum sentido, pois, embora "deles" é provavelmente seu de qualquer maneira, "deles" não é o que você estava em quando você executou git merge
.
Embora o uso do nome real da ramificação possa ser bem legal, ele se desfaz em casos mais complexos. Por exemplo, em vez do acima, você pode fazer:
git checkout ours
git merge 1234567
onde você está mesclando por commit-ID bruto. Pior, você pode até fazer isso:
git checkout 7777777 # detach HEAD
git merge 1234567 # do a test merge
nesse caso, não há nomes de filiais envolvidos!
Eu acho que é de pouca ajuda aqui, mas, de fato, na gitrevisions
sintaxe , você pode se referir a um caminho individual no índice por número, durante uma mesclagem conflitante
git show :1:README
git show :2:README
git show :3:README
O estágio 1 é o ancestral comum dos arquivos, o estágio 2 é a versão do ramo de destino e o estágio 3 é a versão da qual você está mesclando.
A razão pela qual as noções "nossa" e "deles" são trocadas durante o processo rebase
é que a rebase funciona fazendo uma série de escolhas de cereja, em uma ramificação anônima (modo HEAD desanexado). A ramificação de destino é a ramificação anônima e a ramificação de mesclagem é sua ramificação original (pré-rebase): então "--ours" significa que a rebase anônima está sendo construída enquanto "--theirs" significa "nossa ramificação sendo rebased" .
Quanto à entrada gitattributes: poderia ter um efeito: "nosso" realmente significa "usar o estágio # 2" internamente. Mas, como você observa, ele não está realmente no lugar no momento, portanto não deve ter efeito aqui ... bem, a menos que você o copie na árvore de trabalho antes de começar.
Além disso, a propósito, isso se aplica a todos os usos nossos e deles, mas alguns estão em um nível de arquivo inteiro ( -s ours
para uma estratégia de mesclagem; git checkout --ours
durante um conflito de mesclagem) e alguns são peça por peça ( -X ours
ou -X theirs
durante uma -s recursive
mesclar). O que provavelmente não ajuda com nenhuma confusão.
Eu nunca inventei um nome melhor para eles, no entanto. E: veja a resposta do VonC para outra pergunta, onde git mergetool
introduz ainda mais nomes para eles, chamando-os de "local" e "remoto"!