Git Merge Conflict Binary Options


Solução de conflitos de mesclagem Quando uma solicitação de mesclagem tem conflitos, o GitLab pode fornecer a opção para resolver esses conflitos na interface do usuário do GitLab. (Veja os conflitos disponíveis para resolução para obter mais informações sobre quando isso está disponível.) Se esta é uma opção, você verá uma resolução destes conflitos link no widget de solicitação de mesclagem: Clicando isso irá mostrar uma lista de arquivos com conflitos, com conflito seções Uma vez que todos os conflitos foram marcados como 39ours39 ou 39thirs39, o conflito pode ser resolvido. Isso executará uma mesclagem do ramo de destino da solicitação de mesclagem no ramo de origem, resolvendo os conflitos usando as opções escolhidas. Se o ramo de origem for um recurso eo ramal de destino for mestre. Isso é semelhante à execução git checkout recurso git merge mestre localmente. Conflitos disponíveis para resolução O GitLab permite a resolução de conflitos em um arquivo onde todos os itens abaixo são verdadeiros: O arquivo é texto, não binário O arquivo está em uma codificação compatível com UTF-8 O arquivo ainda não contém marcadores de conflito O arquivo, com marcadores de conflito Adicionado, não tem mais de 200 KB de tamanho O ficheiro existe sob o mesmo caminho em ambas as ramificações Se qualquer ficheiro com conflitos no pedido de intercalação não satisfizer todos estes critérios, os conflitos para essa requisição de intercalação não podem ser resolvidos na interface do utilizador. Além disso, GitLab não detecta conflitos em renomeia de um caminho. Por exemplo, isso não criará um conflito: no ramo a. Fazendo git mv file1 file2 no ramo b. Fazendo git mv file1 file3. Em vez disso, ambos os arquivos estarão presentes na filial após a solicitação de mesclagem ser mesclada. MERGE ESTRATÉGIAS O mecanismo de mesclagem (git merge e git pull commands) permite que as estratégias de mesclagem de back-end sejam escolhidas com a opção - s. Algumas estratégias também podem tomar suas próprias opções, que podem ser passadas dando argumentos - Xltoptiongt para git merge e / ou git pull. Isso só pode resolver duas cabeças (ou seja, o ramo atual e outro ramo você puxado de) usando um algoritmo de mesclagem de 3 vias. Ele tenta detectar cuidadosamente ambigüidades de mesclagem cruzada e é considerado geralmente seguro e rápido. Isso só pode resolver duas cabeças usando um algoritmo de mesclagem de 3 vias. Quando há mais de um ancestral comum que pode ser usado para mesclar 3-way, ele cria uma árvore mesclada dos antepassados ​​comuns e usa isso como a árvore de referência para a mesclagem de 3 vias. Isso foi relatado para resultar em menos conflitos de mesclagem sem causar mismerges por testes feitos em compromissos de mesclagem real tomadas de Linux 2.6 história de desenvolvimento do kernel. Além disso, isso pode detectar e manipular fusões envolvendo renomeia. Essa é a estratégia de mesclagem padrão ao puxar ou mesclar um ramo. A estratégia recursiva pode ter as seguintes opções: Esta opção força os bits conflitantes a serem auto-resolvidos limpa, favorecendo nossa versão. As alterações da outra árvore que não entrem em conflito com o nosso lado são refletidas para o resultado de mesclagem. Para um arquivo binário, todo o conteúdo é retirado do nosso lado. Isso não deve ser confundido com a nossa estratégia de mesclagem, que nem sequer olhar para o que a outra árvore contém em tudo. Ele descarta tudo o que a outra árvore fez, declarando que nossa história contém tudo o que aconteceu nele. Este é o oposto do nosso. Com essa opção, merge-recursive gasta um pouco mais de tempo para evitar mismerges que às vezes ocorrem devido a linhas de correspondência sem importância (por exemplo, chaves de funções distintas). Use isso quando os ramos a serem mesclados tiverem divergido. Veja também git-diff1 --patience. Diz merge-recursive para usar um algoritmo dif diferente, o que pode ajudar a evitar mismerges que ocorrem devido a linhas de correspondência sem importância (como chaves de funções distintas). Veja também git-diff1 --diff-algorithm. Ignore-space-change ignorar-todo-espaço ignore-space-at-eol Trata as linhas com o tipo indicado de mudança de espaço em branco como inalterada por causa de uma fusão de três vias. Alterações de espaço em branco misturadas com outras alterações a uma linha não são ignoradas. Veja também git-diff1 - b. - W. E --ignore-space-at-eol. Se a sua versão apenas introduz alterações de espaço em branco para uma linha, a nossa versão é utilizada Se a nossa versão introduz alterações de espaço em branco, mas a sua versão inclui uma alteração substancial, a sua versão é utilizada Caso contrário, a intercalação procede da forma habitual. Isso executa um check-out virtual e check-in de todos os três estágios de um arquivo ao resolver uma fusão de três vias. Esta opção destina-se a ser usada quando se mescla ramos com diferentes filtros limpos ou regras de normalização de fim de linha. Consulte Agrupando ramos com diferentes atributos check-in / checkout no gitattributes5 para obter detalhes. Desativa a opção renormalize. Isso substitui a variável de configuração merge. renormalize. Desative a detecção de renomeação. Consulte também git-diff1 --no-renames. Ativar a detecção de renomeação, opcionalmente, definir o limite de similaridade. Esse é o padrão. Veja também git-diff1 --find-renames. Sinônimo desatualizado para find-renamesltngt. Esta opção é uma forma mais avançada de estratégia de subárvore, onde a estratégia adivinha como duas árvores devem ser deslocadas para combinar entre si durante a mesclagem. Em vez disso, o caminho especificado é prefixado (ou removido do início) para tornar a forma de duas árvores para corresponder. Isso resolve casos com mais de duas cabeças, mas se recusa a fazer uma mesclagem complexa que precisa de resolução manual. Ele é principalmente destinado a ser usado para agrupamento tópico ramo cabeças em conjunto. Essa é a estratégia de mesclagem padrão ao puxar ou mesclar mais de um ramo. Isso resolve qualquer número de cabeças, mas a árvore resultante da mesclagem é sempre a da cabeça de ramo atual, efetivamente ignorando todas as alterações de todos os outros ramos. Destina-se a ser usado para substituir história de desenvolvimento de ramos laterais. Observe que isso é diferente da opção - Xours para a estratégia de mesclagem recursiva. Esta é uma estratégia recursiva modificada. Ao mesclar as árvores A e B, se B corresponde a uma subárvore de A, B é primeiro ajustado para corresponder à estrutura em árvore de A, em vez de ler as árvores no mesmo nível. Este ajuste também é feito para a árvore ancestral comum. Com as estratégias que usam 3-way merge (incluindo o padrão, recursivo), se uma alteração é feita em ambos os ramos, mas posteriormente revertida em um dos ramos, essa mudança estará presente no resultado mesclado algumas pessoas acham este comportamento confuso . Isso ocorre porque somente os cabeçalhos e a base de mesclagem são considerados ao executar uma mesclagem, e não os compromissos individuais. Portanto, o algoritmo de mesclagem considera a alteração revertida como nenhuma alteração, e substitui a versão alterada. Este site de código aberto está hospedado no GitHub. Patches, sugestões e comentários são bem-vindos. Tente: git mergetool Abre uma GUI que o orienta através de cada conflito, e você começa a escolher como mesclar. Às vezes requer um pouco de edição de mão depois, mas geralmente é suficiente por si só. É muito melhor do que fazer a coisa inteira à mão certamente. Como por JoshGlover comentário: O comando doesnt necessariamente abrir uma GUI, a menos que você instalar um. Executar git mergetool para mim resultou em vimdiff sendo usado. Você pode instalar uma das seguintes ferramentas para usá-lo em vez disso: meld. Opendiff. Kdiff3. Tkdiff. Xxdiff. Tortoisemerge. Gvimdiff. difuso. Ecmerge. P4merge. Araxis. Vimdiff. Emergir Eu não entendo por que esta resposta recebeu tantos upvotes, ele isn39t realmente muito útil, pois só contém este um comando e absolutamente nenhuma explicação de como usá-lo. Como outros disseram, ele abriu um vimdiff e mesmo se eu souber como usar vim (alternar as janelas pelo menos ou fechá-los) eu don39t mesmo saber o que cada janela representam nem como comparar ou aceitar as alterações. É bom saber que existe tal comando, mas sem nenhuma explicação de como usá-lo ou instalar outras 3 ferramentas, it39s resposta inútil ndash Petr Mar 10 14 às 13:48 Heres um provável caso de uso, a partir do topo: Youre going Para puxar algumas mudanças, mas oops, você não está atualizado: Então você se atualizar e tentar novamente, mas têm um conflito: Então você decide dar uma olhada nas mudanças: Oh me, oh my, upstream mudou Algumas coisas, mas apenas para usar minhas mudanças. não. Suas mudanças. E então nós tentamos uma última vez Caras, quotoursquot e quottheirsquot é relativo a se ou não você está mesclando ou rebasing. Se você está se fundindo. Em seguida, quotoursquot significa que o ramo you39re fusão em, e quottheirsquot é o ramo you39re fusão pol Quando you39re rebasing. Em seguida, quotoursquot significa que o commits você está rebasing para, enquanto quottheirsquot refere-se aos compromissos que você deseja rebase. Ndash user456814 May 26 14 at 4:27 Eu acho que as ferramentas de mesclagem raramente me ajudam a entender o conflito ou a resolução. Eu sou geralmente mais bem sucedido olhando para os marcadores de conflito em um editor de texto e usando git log como um suplemento. Aqui estão algumas dicas: A melhor coisa que eu encontrei é usar o estilo de conflito de mesclagem diff3: git config merge. conflictstyle diff3 Isso produz marcadores de conflito como este: A seção do meio é o que o antepassado comum parecia. Isso é útil porque você pode compará-lo com as versões superior e inferior para obter uma melhor idéia do que foi alterado em cada filial, o que lhe dá uma idéia melhor para o que a finalidade de cada mudança foi. Se o conflito é apenas algumas linhas, isso geralmente torna o conflito muito óbvio. (Saber como corrigir um conflito é muito diferente, você precisa estar ciente do que outras pessoas estão trabalhando Se você está confuso, é provavelmente o melhor para apenas chamar essa pessoa em seu quarto para que eles possam ver o que você está olhando. Conflito é mais longo, então vou cortar e colar cada uma das três seções em três arquivos separados, como o meu, comum e deles. Então eu posso executar os seguintes comandos para ver os dois hunks diff que causou o conflito: Isso não é o mesmo que usar uma ferramenta de mesclagem, uma vez que uma ferramenta de mesclagem irá incluir todos os hunks dif não-conflitantes também. Acho que para distrair. Alguém já mencionou isso, mas entender a intenção por trás de cada pedaço dif é geralmente muito útil para entender de onde veio um conflito e como lidar com isso. Isso mostra todos os compromissos que tocaram esse arquivo entre o antepassado comum e as duas cabeças que você está mesclando. (Portanto, ele não inclui compromissos que já existem em ambos os ramos antes da mesclagem.) Isso ajuda a ignorar hunks diff que claramente não são um fator em seu conflito atual. Verifique suas alterações com ferramentas automatizadas. Se você tiver testes automatizados, execute esses. Se você tem um fiapo. Execute isso Se é um projeto construível, em seguida, construí-lo antes de cometer, etc Em todos os casos, você precisa fazer um pouco de teste para se certificar de suas alterações não quebrar nada. (Heck, até mesmo uma mesclagem sem conflitos pode quebrar o código de trabalho.) Planejar com antecedência comunicar com colegas de trabalho. Planejar com antecedência e estar ciente do que outros estão trabalhando pode ajudar a evitar conflitos de mesclagem e / ou ajudar a resolvê-los mais cedo - enquanto os detalhes ainda estão em mente. Por exemplo, se você sabe que você e outra pessoa estão trabalhando em diferentes refatorações que afetarão o mesmo conjunto de arquivos, você deve conversar um com o outro antes do tempo e ter um melhor sentido para que tipos de mudanças cada um de vocês é fazer. Você pode economizar tempo e esforço se você realizar suas alterações planejadas em série, em vez de em paralelo. Para grandes refatorações que atravessam uma grande faixa de código, você deve considerar seriamente trabalhar em série: todo mundo pára de trabalhar nessa área do código enquanto uma pessoa executa a refatoração completa. Se você não pode trabalhar em série (devido à pressão do tempo, talvez), em seguida, comunicar sobre esperados conflitos de mesclagem, pelo menos, ajuda a resolver os problemas mais cedo, enquanto os detalhes ainda estão frescos em mente. Por exemplo, se um colega de trabalho estiver fazendo uma série de interrupções ao longo de um período de uma semana, você pode optar por mesclar / rebase na filial de colegas uma ou duas vezes por dia durante essa semana. Dessa forma, se você encontrar conflitos de fusão / rebase, você pode resolvê-los mais rapidamente do que se você esperar algumas semanas para mesclar tudo em um grande caroço. Se você não tiver certeza de uma fusão, não forçá-lo. A fusão pode se sentir esmagadora, especialmente quando há um monte de arquivos conflitantes e os marcadores de conflito cobrem centenas de linhas. Muitas vezes, quando a estimativa de projetos de software que não incluem tempo suficiente para itens gerais, como a manipulação de uma fusão gnarly, por isso parece um arrasto real para passar várias horas dissecando cada conflito. A longo prazo, planejar com antecedência e estar ciente do que os outros estão trabalhando são as melhores ferramentas para antecipar conflitos de mesclagem e preparar-se para resolvê-los corretamente em menos tempo. Identificar quais arquivos estão em conflito (Git deve dizer-lhe isso). Abra cada arquivo e examine os diffs Git demarca-los. Esperemos que seja óbvio qual versão de cada bloco manter. Talvez seja necessário discuti-lo com outros desenvolvedores que cometeram o código. Depois de ter resolvido o conflito em um arquivo git add thefile. Uma vez que você resolveu todos os conflitos, faça o rebase do git --continue ou o que comando Git disse para fazer quando você terminou. Thulfir: quem disse alguma coisa sobre fazer um ramo igual ao outro? Existem diferentes cenários onde você precisa se fundir, sem fazer um ramo igual ao outro. Uma delas é quando você é feito com um ramo de desenvolvimento e deseja incorporar suas alterações no ramo mestre depois disso, o ramo de desenvolvimento pode ser excluído. Outra é quando você quer rebase seu ramo de desenvolvimento, a fim de facilitar a fusão final final para o mestre. Ndash Teemu Leisti Sep 21 12 em 8:50 JustinGrant git adicionar arquivos de estágios no índice não adiciona nada ao repositório. Git commit adiciona coisas ao repositório. Este uso faz sentido para fusões - a mesclagem automaticamente etapas todas as alterações que podem ser mescladas automaticamente é sua responsabilidade para mesclar o resto das alterações e adicioná-los ao índice quando você é feito. Ndash mehaase Oct 17 12 at 15:13 Usando quotgit addquot é o verdadeiro truque aqui. Você pode nem mesmo querer cometer (talvez você queira esconder), mas você tem que fazer quotgit addquot para completar a mesclagem. Eu acho que mergetool faz o add para você (embora isn39t na página de manual), mas se você fizer a mesclagem manualmente, você precisa usar quotgit addquot para completá-lo (mesmo se você don39t deseja cometer). Ndash nobar Oct 25 10 at 9:37 Conflitos de mesclagem acontece quando são feitas alterações a um arquivo ao mesmo tempo. Aqui está como resolvê-lo. Aqui estão as etapas simples o que fazer quando você entrar em estado de conflito: Observe a lista de arquivos em conflito com: git status (em caminhos Unmerged). Resolva os conflitos separadamente para cada arquivo por uma das seguintes opções: use GUI para resolver os conflitos: git mergetool para aceitar a versão remota / other, use: git checkout --es caminho / arquivo Isso rejeitará quaisquer alterações locais que você fez para isso Arquivo. Para aceitar a versão local / our, use: git checkout --ours path / file Você deve ter cuidado, como mudanças remotas que os conflitos foram feitos por algum motivo. Edite o arquivo manualmente e procure o bloco de código entre ltltltltlt / gtgtgtgtgt e então escolha a versão de cima ou de baixo se o conflito for sobre arquivos que foram adicionados / removidos, use git add / git rm Finalmente, revise os arquivos prontos para commit usando : Git status. Se você ainda tiver arquivos sob Caminhos desiguais. Então deixe Git saber que você resolveu o conflito por: git adicionar caminho / arquivo. Se todos os conflitos foram resolvidos com êxito, envie as alterações por: git commit - a e pressione para remoto como de costume. Ive usou com sucesso DiffMerge (funciona bem no OS X), que pode comparar visualmente e mesclar arquivos no Windows, OS X e Linux. Ele mostra graficamente as alterações entre 3 arquivos e permite fusão automática (quando seguro fazê-lo) e controle total sobre a edição do arquivo resultante. Basta fazer o download e executar em repo como: No OS X você pode instalar via: E provavelmente (se não for fornecido) você precisa o seguinte invólucro extra simples colocado em seu caminho (por exemplo, / usr / bin) DiffMerge (Screenshot do Linux) : Em seguida, você pode usar os seguintes atalhos de teclado: AltUp / Down para saltar para as alterações anterior / seguinte. AltLeft / Right para aceitar a mudança da esquerda ou da direita Alternativamente, você pode usar opendiff (parte de Xcode Tools) que permite que você mescle dois arquivos ou diretórios juntos para criar um terceiro arquivo ou diretório. Veja como os conflitos são apresentados ou, no Git, a documentação de mesclagem do git para entender o que são os marcadores de conflito de mesclagem. Além disso, a seção Como Resolver Conflitos explica como resolver os conflitos: Depois de ver um conflito, você pode fazer duas coisas: Decida não mesclar. As únicas limpezas que você precisa são para redefinir o arquivo de índice para a HEAD commit para inverter 2. e para limpar as mudanças de árvore de trabalho feitas por 2. e 3. git merge --abort pode ser usado para isso. Resolver os conflitos. Git irá marcar os conflitos na árvore de trabalho. Edite os arquivos em forma e git adicioná-los ao índice. Use git commit para selar o negócio. Você pode trabalhar através do conflito com uma série de ferramentas: Use um mergetool. Git mergetool para lançar um mergetool gráfico que irá trabalhar você através da fusão. Olhe para os diffs. Git diff mostrará um diff de três vias, destacando as mudanças das versões HEAD e MERGEHEAD. Olhe para os diffs de cada ramo. Git log --merge - p ltpathgt mostrará diffs primeiro para a versão HEAD e depois para a versão MERGEHEAD. Olhe para os originais. Git show: 1: filename mostra o antepassado comum, git show: 2: filename mostra a versão HEAD e git show: 3: filename mostra a versão MERGEHEAD. Você também pode ler sobre os marcadores de conflito de mesclagem e como resolvê-los na seção do livro Pro Git Conflitos de mesclagem básica. Verifique o status do git: git status Obter o patchset: git fetch (checkout o patch certo do seu git commit) Checkout um ramo local (temp1 no meu exemplo aqui): git checkout - b temp1 Puxe o conteúdo recente do mestre: git pull - - rebase origin master Inicie o mergetool e verifique os conflitos e corrija-os. E verifique as alterações no ramo remoto com o ramo atual: git mergetool Verifique o status novamente: git status Exclua os arquivos indesejados criados localmente pelo mergetool, normalmente o mergetool cria o arquivo extra com a extensão. orig. Exclua esse arquivo como se fosse apenas a duplicata e corrija as alterações localmente e adicione a versão correta de seus arquivos. Git add yourchangedcorrectfiles verificar o status novamente: git status Confirmar as alterações para o mesmo commit id (isso evita um novo conjunto de patch separado): git commit --amend Push para o ramo mestre: git push (para o seu repositório git) Você poderia corrigir Mesclar conflitos de várias maneiras, como outros têm detalhado. Eu acho que a verdadeira chave é saber como as mudanças fluem com repositórios locais e remotos. A chave para isso é entender ramos de rastreamento. Descobri que eu acho que o ramo de rastreamento como a peça faltando no meio entre mim o meu local, o diretório de arquivos reais eo remoto definido como origem. Ive pessoalmente entrou no hábito de 2 coisas para ajudar a evitar isso. Que tem dois inconvenientes - a) Todos os arquivos novos / alterados são adicionados e que podem incluir algumas alterações indesejadas. B) Você não consegue rever a lista de arquivos primeiro. Então, em vez disso eu faço: Desta forma, você é mais deliberado sobre quais arquivos são adicionados e você também pode rever a lista e pensar um pouco mais ao usar o editor para a mensagem. Acho que também melhora minhas mensagens de commit quando uso um editor de tela cheia em vez da opção - m. Update - como o tempo passou Ive mudou mais para: Também (e mais relevantes para a sua situação), eu tento evitar: porque pull implica uma mesclagem e se você tiver alterações localmente que você didnt quer mesclado você pode facilmente acabar com o código mesclado E / ou mesclar conflitos para o código que não deveria ter sido mesclado. Simplesmente, se você souber bem que as mudanças em um dos repositórios não são importantes, e quiser resolver todas as mudanças em favor do outro, então use: para resolver as mudanças no Favor do seu repositório. Ou para resolver alterações a favor do outro ou do repositório principal. Ou então você terá que usar uma ferramenta de mesclagem GUI para passar por arquivos um por um, digamos que a ferramenta de mesclagem é p4merge. Ou escrever qualquer nome youve já instalado e depois de terminar um arquivo, você terá que salvar e fechar, de modo que o próximo vai abrir respondido 26 de janeiro às 17:42 git checkout. --seus problemas resolvidos meu problema ndash Ramesh Chand Mar 10 às 6:53 se você preferir resolver conflitos manualmente tente abrir a pasta no Visual Studio Code, ele marca arquivos com conflitos e cores conflito linhas dentro de cada um ndash Mohamed Selim Jul 3 at 8:31 resposta CoolAJ86s resume praticamente tudo. No caso de você ter mudanças em ambos os ramos no mesmo pedaço de código você terá que fazer uma mesclagem manual. Abra o arquivo em conflito em qualquer editor de texto e você deve ver a seguinte estrutura. Escolha uma das alternativas ou uma combinação de ambas de uma maneira que você deseja que o novo código seja, ao remover sinais iguais e colchetes angulares. Ao falar de pull / fetch / merge nas respostas acima, eu gostaria de compartilhar um truque interessante e produtivo, git pull --rebase Este comando acima é o comando mais útil na minha vida git que salvou um monte de tempo. Antes de empurrar sua mudança recentemente comprometida para o servidor remoto, tente git pull --rebase rather git pull e manual de mesclagem e ele irá sincronizar automaticamente as últimas mudanças no servidor remoto (com uma busca fetal) e colocará o local mais recente cometer no topo do git log . Não há necessidade de se preocupar com pull / merge manual. Em caso de conflito, basta usar Não parece sempre funcionar para mim e normalmente acaba exibindo cada commit que era diferente entre os dois ramos, isso acontece mesmo quando se usa - para separar o caminho do comando. O que eu faço para contornar esse problema é abrir duas linhas de comando e em uma execução e na outra Substituindo MERGEDINBRANCH com o ramo que eu fundi e caminho com o arquivo que está em conflito. Este comando registrará todos os compromissos, em forma de patch, entre (.) Dois compromissos. Se você deixar um lado vazio como nos comandos acima, o git usará automaticamente HEAD (o ramo no qual você está se mesclando neste caso). Isso permitirá que você veja quais compromissos foram para o arquivo nos dois ramos depois que eles divergiram. Geralmente torna muito mais fácil resolver conflitos. Respondeu Dec 11 14 at 15:19 Eu sempre seguir os passos abaixo para evitar conflitos. Git checkout master (Venha para o ramo mestre) git pull (Atualize seu mestre para obter o código mais recente) git checkout - b mybranch (Checkout um novo ramo e começar a trabalhar nesse ramo para que seu mestre permaneça sempre no topo do tronco. Git add. E git commit E git push (no seu ramo local depois de suas mudanças) git checkout master (Volte ao seu mestre.) Agora você pode fazer o mesmo e manter como muitos ramos locais que você quer e trabalhar simultaneamente o meu apenas fazendo um git checkout para Seu ramo sempre que necessário. Respondido Feb 12 15 at 4:25 se você quiser mesclar de ramo (teste) para mestre, você pode seguir estas etapas: Passo1: ir para o ramo Passo2: git pull --rebase origem mestre Passo3: se houver alguns conflitos, Vá para esses arquivos para modificá-lo. Passo 4: adicione estas alterações Passo 5: git rebase --continue Passo6: se ainda houver conflito, volte para Step3 novamente. Se não houver conflito, faça o seguinte: git push teste de origem Step7: e então não há conflito entre teste e mestre. Você pode usar mesclar diretamente. Quando executar git fetch e, em seguida, git merge Quando executar git fetch e, em seguida, git rebase Ao executar git pull (que é realmente igual a uma das condições acima mencionadas) Ao executar git stash pop Quando você está aplicando patches git (confirma que são exportados para arquivos a serem transferidos, por exemplo, por e-mail) Você precisa instalar uma ferramenta de mesclagem que seja compatível com o Git para resolver os conflitos. Eu pessoalmente uso KDiff3 e Ive encontrado agradável e acessível. Você pode baixar sua versão do Windows aqui: BTW se você instalar Git Extensions há uma opção em seu assistente de instalação para instalar o Kdiff3. Em seguida, configure o git configs para usar o Kdiff como seu mergetool: (Lembre-se de substituir o caminho pelo caminho real do arquivo exe do Kdiff.) Então toda vez que você encontrar um conflito de mesclagem basta executar este comando: Então abre o Kdiff3, E primeiro tenta resolver os conflitos de mesclagem automaticamente. A maioria dos conflitos seria resolvida espontaneamente e você precisa corrigir o restante manualmente. Então uma vez que você é feito, excepto o arquivo e vai ao arquivo seguinte com o conflito e você faz a mesma coisa outra vez até que todos os conflitos sejam resolvidos. Para verificar se tudo está mesclado com êxito, basta executar o comando mergetool novamente, você deve obter este resultado: Eu quer o meu ou sua versão completa, ou quer rever as alterações individuais e decidir por cada um deles. Aceite a minha versão (local, nossa): Aceite sua versão (remota, deles): Se você quiser fazer para todos os arquivos de conflito executar: Reveja todas as alterações e aceitá-los individualmente git mergetool Revise as alterações e aceite Versão para cada um deles. Git add ltfilenamegt git commit - m fundido bla bla O mergetool padrão funciona na linha de comando. Como usar uma linha de comando mergetool deve ser uma questão separada. Você também pode instalar uma ferramenta visual para isso, p. Meld and run Ele abrirá versão local (nossa), versão base ou mesclada (o resultado atual da mesclagem) e versão remota (deles). Salve a versão mesclada quando tiver terminado, execute o git mergetool - t meld novamente até que você obtenha Nenhum arquivo precisa ser mesclado e, em seguida, vá para as Etapas 3. e 4. Usando paciência Im surpresa ninguém mais falou sobre a resolução de conflitos usando paciência com a fusão recursiva estratégia. Para o grande conflito de mesclagem, usar paciência proporcionou bons resultados para mim. A idéia é que ele vai tentar combinar blocos em vez de linhas individuais. Se você alterar o recuo do seu programa, por exemplo, a estratégia de fusão do git padrão às vezes combina com chaves simples Da documentação: Comparação com o antepassado comum Se você tiver um conflito de mesclagem e quiser ver o que os outros tinham em mente ao modificar seu ramo, Às vezes mais fácil de comparar seu ramo diretamente com o antepassado comum (em vez de nosso ramo). Para isso você pode usar merge-base: Geralmente, você só quer ver as alterações para um determinado arquivo:

Comments

Popular Posts