{"id":60588,"date":"2023-10-29T07:29:36","date_gmt":"2023-10-29T10:29:36","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=60588&#038;preview=true&#038;preview_id=60588"},"modified":"2023-11-06T05:07:53","modified_gmt":"2023-11-06T08:07:53","slug":"git-mesclagem","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/","title":{"rendered":"Como Executar Tarefas Complexas de Mesclagem (Merge) no Git"},"content":{"rendered":"<p>Com o trabalho que acontece em um projeto de desenvolvimento,\u00a0o <a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git<\/a> \u00e9 uma ferramenta fundamental. No entanto, quando voc\u00ea tem muitos colaboradores no projeto, ocasionalmente eles podem acabar se atrapalhando. Isso significa que dois desenvolvedores podem trabalhar na mesma parte de c\u00f3digo e ambos podem fazer um commit. Nessas situa\u00e7\u00f5es, \u00e9 necess\u00e1rio recorrer a algumas estrat\u00e9gias de mesclagem (merge) no Git para resolver os conflitos.<\/p>\n<p>Embora a mesclagem no Git possa ser direta em alguns casos, muitas vezes voc\u00ea precisa adotar abordagens avan\u00e7adas. Isso inclui estrat\u00e9gias como mesclagem recursiva, mesclagem de tr\u00eas vias e muitas outras. Em certos momentos, pode ser necess\u00e1rio at\u00e9 mesmo desfazer uma mesclagem no Git.<\/p>\n<p>Neste tutorial, vamos explorar algumas t\u00e9cnicas avan\u00e7adas de mesclagem no Git para enriquecer as suas habilidades. Vamos ao que interessa!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Introdu\u00e7\u00e3o \u00e0s estrat\u00e9gias de mesclagem do Git<\/h2>\n<p>O conceito central de uma mesclagem \u00e9 simples: voc\u00ea une duas branches para transformar v\u00e1rios commits em um s\u00f3. No entanto, existem v\u00e1rias t\u00e9cnicas que voc\u00ea pode empregar para garantir que voc\u00ea fa\u00e7a o commit e a mesclagem do c\u00f3digo correto.<\/p>\n<p>Vamos analisar algumas estrat\u00e9gias importantes que voc\u00ea precisa entender. Elas n\u00e3o est\u00e3o em nenhuma ordem e, em algum momento da sua <a href=\"https:\/\/kinsta.com\/pt\/blog\/como-se-tornar-um-desenvolvedor-web\/\" rel=\"noopener\">carreira de desenvolvimento<\/a>, voc\u00ea poder\u00e1 precisar de todas elas. Al\u00e9m disso, voc\u00ea tamb\u00e9m precisar\u00e1 ter uma s\u00f3lida compreens\u00e3o dos conceitos b\u00e1sicos do Git, como ponteiros, branches e commits.<\/p>\n<h3>A diferen\u00e7a entre mesclagens de duas vias e tr\u00eas vias<\/h3>\n<p>\u00c9 \u00fatil compreender a diferen\u00e7a entre uma mesclagem de duas vias e sua contraparte de tr\u00eas vias. A maioria das estrat\u00e9gias de mesclagem que abordaremos a seguir trata de situa\u00e7\u00f5es de tr\u00eas vias. Na verdade, \u00e9 mais simples explicar o que \u00e9 uma mesclagem de tr\u00eas vias. Considere o exemplo a seguir:<\/p>\n<ul>\n<li>Voc\u00ea tem uma branch <strong>principal<\/strong> com v\u00e1rios commits e um branch de recursos que tamb\u00e9m tem commits.<\/li>\n<li>No entanto, se a<strong> branch principal<\/strong> fizer mais commits, ambas as branches divergir\u00e3o.<\/li>\n<li>Em termos simples, tanto o branch <strong>principal<\/strong> quanto o branch de recursos t\u00eam commits que o outro n\u00e3o tem. Se voc\u00ea fizer a mesclagem deles usando uma abordagem bidirecional, perder\u00e1 um commit (provavelmente no <strong>principal<\/strong>)<\/li>\n<li>Em vez disso, o Git criar\u00e1 um novo commit de mesclagem a partir da branch <strong>principal<\/strong> e de recurso atuais.<\/li>\n<\/ul>\n<p>Em resumo, o Git examinar\u00e1 tr\u00eas pontos de controle diferentes para mesclar as altera\u00e7\u00f5es: o cabe\u00e7alho do <strong>principal<\/strong>, o cabe\u00e7alho do branch de recursos e o antecessor comum. Esse ser\u00e1 o commit final comum ao branch <strong>principal<\/strong> e ao branch de recursos.<\/p>\n<p>Na pr\u00e1tica, n\u00e3o \u00e9 necess\u00e1rio se preocupar se a estrat\u00e9gia de mesclagem \u00e9 de duas ou tr\u00eas vias. Muitas vezes, a escolha da estrat\u00e9gia ser\u00e1 irrelevante. Ainda assim, \u00e9 bom entender como o Git funciona ao mesclar <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#import-a-repository-to-github\" rel=\"noopener\">branches e reposit\u00f3rios<\/a>.<\/p>\n<h3>Mesclagem de avan\u00e7o r\u00e1pido<\/h3>\n<p>A primeira estrat\u00e9gia pode n\u00e3o exigir que voc\u00ea tome nenhuma a\u00e7\u00e3o para execut\u00e1-la. A mesclagem de avan\u00e7o r\u00e1pido move o ponteiro para o commit mais recente no branch <strong>principal<\/strong> (main) sem criar um commit adicional (o que pode ser confuso). \u00c9 uma abordagem limpa que muitos desenvolvedores adotam como padr\u00e3o.<\/p>\n<p>A t\u00e9cnica come\u00e7a com uma branch principal que pode ou n\u00e3o ter commits. Nesse caso, voc\u00ea abre uma nova branch, trabalha no c\u00f3digo e faz commits. Nesse ponto, voc\u00ea tamb\u00e9m precisa mesclar essas altera\u00e7\u00f5es de volta ao <strong>principal<\/strong>. Uma mesclagem de avan\u00e7o r\u00e1pido tem um requisito para ser realizada:<\/p>\n<ul>\n<li>Voc\u00ea precisa garantir que nenhum outro commit ocorra no <strong>principal<\/strong> enquanto voc\u00ea trabalha na nova branch.<\/li>\n<\/ul>\n<p>Isso nem sempre ser\u00e1 poss\u00edvel, especialmente se voc\u00ea trabalha em uma equipe grande. Mesmo assim, se voc\u00ea optar por mesclar seus commits com um branch principal (main) que est\u00e1 atualizado e sem commits pr\u00f3prios, isso executar\u00e1 uma mesclagem de avan\u00e7o r\u00e1pido. Voc\u00ea pode fazer isso de algumas maneiras diferentes:<\/p>\n<pre><code class=\"language-bash\">git merge &lt;branch&gt;\n\ngit merge --ff-only\n<\/code><\/pre>\n<p>Muitas vezes, voc\u00ea n\u00e3o precisar\u00e1 especificar que deseja executar uma mesclagem de avan\u00e7o r\u00e1pido. Esse tipo de mesclagem ocorre em <a href=\"https:\/\/kinsta.com\/pt\/blog\/git-para-desenvolvimento-web\/\" rel=\"noopener\">projetos individuais<\/a> ou com equipes pequenas. Em um ambiente de ritmo acelerado, essa \u00e9 uma mesclagem rara. Por isso, outras ser\u00e3o mais comuns.<\/p>\n<h3>Mesclagem recursiva<\/h3>\n<p>Uma mesclagem recursiva muitas vezes \u00e9 o padr\u00e3o, pois ocorrer\u00e1 com mais frequ\u00eancia em situa\u00e7\u00f5es comuns do que outros tipos de mesclagem. Uma mesclagem recursiva \u00e9 quando voc\u00ea faz commits em um branch, mas outros commits tamb\u00e9m ocorrem no branch <strong>principal<\/strong> (main).<\/p>\n<p>Quando chega a hora de mesclar, o Git vai percorrer recursivamente o branch para criar seu commit definitivo. Isso significa que um commit de mesclagem ter\u00e1 dois pais quando voc\u00ea o completar.<\/p>\n<p>Assim como em uma mesclagem de avan\u00e7o r\u00e1pido, voc\u00ea normalmente n\u00e3o precisa especificar uma mesclagem recursiva. No entanto, voc\u00ea pode garantir que o Git n\u00e3o escolha algo como uma mesclagem de avan\u00e7o r\u00e1pido usando os seguintes comandos e flags:<\/p>\n<pre><code class=\"language-bash\">git merge --no-ff\n\ngit merge -s recursive &lt;branch1&gt; &lt;branch2&gt;\n<\/code><\/pre>\n<p>A segunda linha usa a op\u00e7\u00e3o de estrat\u00e9gia <code>-s<\/code> e a nomea\u00e7\u00e3o expl\u00edcita para realizar uma mesclagem. Ao contr\u00e1rio de uma mesclagem de avan\u00e7o r\u00e1pido, uma mesclagem recursiva <em>cria<\/em> um commit de mesclagem dedicado. Para mesclagens de duas vias, uma estrat\u00e9gia recursiva \u00e9 s\u00f3lida e funciona bem.<\/p>\n<h3>Ours e Theirs<\/h3>\n<p>Uma situa\u00e7\u00e3o comum durante o desenvolvimento \u00e9 quando voc\u00ea cria uma nova funcionalidade em seu projeto que, no final das contas, n\u00e3o ser\u00e1 aprovada. Em muitos casos, voc\u00ea ter\u00e1 muito c\u00f3digo para mesclar que tamb\u00e9m \u00e9 interdependente. Uma mesclagem &#8216;ours&#8217; \u00e9 a melhor maneira de resolver esses conflitos.<\/p>\n<p>Esse tipo de mesclagem pode lidar com quantos branches forem necess\u00e1rios e trabalha para ignorar todas as altera\u00e7\u00f5es nesses outros branches. \u00c9 \u00f3timo se voc\u00ea deseja eliminar recursos antigos ou desenvolvimentos indesejados. Aqui est\u00e1 o comando que voc\u00ea precisa:<\/p>\n<pre><code class=\"language-bash\">git merge -s ours &lt;branch1&gt; &lt;branch2&gt;<\/code><\/pre>\n<p>Uma mesclagem &#8216;ours&#8217; essencialmente significa que o branch atual cont\u00e9m o c\u00f3digo de direito. Isso se relaciona com as mesclagens &#8216;theirs&#8217;, que tratam o outro branch como correto. No entanto, voc\u00ea precisa passar outra op\u00e7\u00e3o de estrat\u00e9gia aqui:<\/p>\n<pre><code class=\"language-bash\">git merge -X theirs &lt;branch2&gt;\n<\/code><\/pre>\n<p>Usar as mesclagens &#8220;ours&#8221; e &#8220;theirs&#8221; pode ser confuso, mas, em geral, \u00e9 seguro se ater aos casos de uso t\u00edpicos (manter tudo no branch atual e descartar o restante).<\/p>\n<h3>Octopus<\/h3>\n<p>Lidar com m\u00faltiplos cabe\u00e7alhos &#8211; ou seja, mesclar mais de um branch em outro &#8211; pode ser uma situa\u00e7\u00e3o complicada para um merge no Git. Pode-se dizer que voc\u00ea precisa de mais do que duas m\u00e3os para resolver os conflitos. \u00c9 aqui que uma mesclagem do octopus (octopus merge) entra em cena.<\/p>\n<p>As mesclagens de octopus s\u00e3o o oposto completo das mesclagens &#8216;ours&#8217; e &#8216;theirs&#8217;. O caso de uso t\u00edpico \u00e9 quando voc\u00ea deseja incluir v\u00e1rios commits relacionados a recursos semelhantes e mescl\u00e1-los em um \u00fanico commit. Aqui est\u00e1 como voc\u00ea especifica essa op\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-bash\">git merge -s octopus &lt;branch1&gt; &lt;branch2&gt;\n<\/code><\/pre>\n<p>No entanto, o Git recusar\u00e1 uma mesclagem do octopus (octopus merge) se voc\u00ea precisar fazer uma resolu\u00e7\u00e3o manual posteriormente. Para resolu\u00e7\u00f5es autom\u00e1ticas, uma mesclagem do octopus\u00a0ser\u00e1 o padr\u00e3o se voc\u00ea precisar mesclar v\u00e1rios branches em um s\u00f3.<\/p>\n<h3>Resolve<\/h3>\n<p>Uma das maneiras mais seguras de mesclar commits, uma mesclagem de resolu\u00e7\u00e3o (resolve merge) \u00e9 \u00f3tima se voc\u00ea tiver uma situa\u00e7\u00e3o que envolve <a href=\"https:\/\/tonyg.github.io\/revctrl.org\/CrissCrossMerge.html\" target=\"_blank\" rel=\"noopener noreferrer\">mesclagens cruzadas<\/a>.\u00a0Tamb\u00e9m \u00e9 um m\u00e9todo r\u00e1pido de resolu\u00e7\u00e3o para implementar. Voc\u00ea pode querer usar esse m\u00e9todo para hist\u00f3ricos de mesclagem mais complexos, mas apenas aqueles com dois cabe\u00e7alhos.<\/p>\n<pre><code class=\"language-bash\">git merge -s resolve &lt;branch1&gt; &lt;branch2&gt;\n<\/code><\/pre>\n<p>Como uma mesclagem de resolu\u00e7\u00e3o usa um algoritmo de tr\u00eas vias para trabalhar com a branch atual e com a branch da qual voc\u00ea est\u00e1 tirando, ela pode n\u00e3o ser t\u00e3o flex\u00edvel quanto outros m\u00e9todos de mesclagem. Entretanto, para o trabalho que voc\u00ea precisa fazer, a mesclagem de resolu\u00e7\u00e3o \u00e9 quase perfeita.<\/p>\n<h3>Subtree<\/h3>\n<p>Esse complemento de uma mesclagem recursiva pode confundir voc\u00ea. Tentaremos explicar isso usando um exemplo claro:<\/p>\n<ul>\n<li>Primeiro, considere duas \u00e1rvores diferentes &#8211; X e Y. Geralmente, s\u00e3o dois reposit\u00f3rios.<\/li>\n<li>Voc\u00ea deseja mesclar as duas \u00e1rvores em uma s\u00f3.<\/li>\n<li>Se a \u00e1rvore Y corresponder a uma das sub\u00e1rvores em X, a \u00e1rvore Y ser\u00e1 alterada para corresponder \u00e0 estrutura X.<\/li>\n<\/ul>\n<p>Isso significa que uma mesclagem de sub\u00e1rvore \u00e9 fant\u00e1stica se voc\u00ea quiser <a href=\"https:\/\/kinsta.com\/pt\/blog\/monorepo-vs-multi-repo\/\" rel=\"noopener\">combinar v\u00e1rios reposit\u00f3rios<\/a> em um artigo definitivo. Voc\u00ea tamb\u00e9m far\u00e1 as altera\u00e7\u00f5es necess\u00e1rias na \u00e1rvore &#8220;antecessor&#8221; comum de ambas as branches.<\/p>\n<pre><code class=\"language-bash\">git merge -s subtree &lt;branch1&gt; &lt;branch2&gt;\n<\/code><\/pre>\n<p>Em resumo, uma mesclagem de subtree \u00e9 o que voc\u00ea deseja se precisar combinar dois reposit\u00f3rios. Na verdade, voc\u00ea pode ter dificuldade para entender qual estrat\u00e9gia de mesclagem \u00e9 a ideal para voc\u00ea. Mais adiante, discutiremos algumas ferramentas que podem ajudar voc\u00ea.<\/p>\n<p>Antes disso, existem alguns conflitos de mesclagem avan\u00e7ados que voc\u00ea precisa saber como resolver.<\/p>\n<h2>Como lidar com conflitos de mesclagem complexos do Git<\/h2>\n<p>Mesclar branches no Git \u00e9 mais como gerenciar conflitos e resolv\u00ea-los. Quanto maior o <a href=\"https:\/\/kinsta.com\/pt\/blog\/agencia-wordpress\/\">tamanho da sua equipe e do seu projeto<\/a>, maior a chance de conflitos. Alguns deles podem ser complexos e dif\u00edceis de resolver.<\/p>\n<p>Considerando que os conflitos podem consumir tempo, dinheiro e recursos, voc\u00ea precisa descobrir como elimin\u00e1-los rapidamente. Geralmente, dois desenvolvedores trabalhar\u00e3o no mesmo conjunto de c\u00f3digos e ambos decidir\u00e3o fazer o commit.<\/p>\n<p>Isso pode significar que voc\u00ea pode n\u00e3o conseguir iniciar a mesclagem devido a altera\u00e7\u00f5es pendentes ou ter uma falha durante uma mesclagem que exija interven\u00e7\u00e3o manual. Quando o diret\u00f3rio de trabalho estiver &#8220;limpo&#8221;, voc\u00ea poder\u00e1 come\u00e7ar. Muitas vezes, o Git o notificar\u00e1 sobre um conflito quando voc\u00ea iniciar uma mesclagem:<\/p>\n<figure id=\"attachment_155619\" aria-describedby=\"caption-attachment-155619\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155619 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-conflict.png\" alt=\"Uma janela do Terminal mostrando um conflito de mesclagem no Git.\" width=\"1000\" height=\"412\"><figcaption id=\"caption-attachment-155619\" class=\"wp-caption-text\">Uma janela do Terminal mostrando um conflito de mesclagem no Git.<\/figcaption><\/figure>\n<p>No entanto, para obter mais informa\u00e7\u00f5es, voc\u00ea pode executar um <code>git status<\/code> e ver os detalhes:<\/p>\n<figure id=\"attachment_155623\" aria-describedby=\"caption-attachment-155623\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155623 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-status.png\" alt=\"Uma janela do Terminal mostrando os resultados de um comando git status.\" width=\"1000\" height=\"342\"><figcaption id=\"caption-attachment-155623\" class=\"wp-caption-text\">Uma janela do Terminal mostrando os resultados de um comando git status.<\/figcaption><\/figure>\n<p>A partir daqui, voc\u00ea pode come\u00e7ar a trabalhar nos v\u00e1rios arquivos que est\u00e3o causando o conflito. Algumas das ferramentas e t\u00e9cnicas que discutiremos a seguir ajudar\u00e3o voc\u00ea.<\/p>\n<h3>Abortando e reiniciando mesclagens<\/h3>\n<p>\u00c0s vezes, voc\u00ea precisa interromper a mesclagem completamente e come\u00e7ar com um ponto de partida relativamente limpo. De fato, ambos os comandos que mencionamos s\u00e3o adequados para situa\u00e7\u00f5es em que voc\u00ea ainda n\u00e3o sabe o que fazer com um conflito.<\/p>\n<p>Voc\u00ea pode optar por abortar ou reiniciar uma mesclagem em andamento com os seguintes comandos:<\/p>\n<pre><code class=\"language-bash\">git merge --abort\n\ngit reset\n<\/code><\/pre>\n<p>Os dois comandos s\u00e3o semelhantes, mas voc\u00ea os usa em circunst\u00e2ncias diferentes. Por exemplo, ao abortar uma mesclagem, voc\u00ea simplesmente reverter\u00e1 o branch de volta ao estado anterior \u00e0 mesclagem. Em alguns casos, isso n\u00e3o funcionar\u00e1. Por exemplo, se o seu diret\u00f3rio de trabalho possuir altera\u00e7\u00f5es n\u00e3o confirmadas e n\u00e3o lan\u00e7adas, voc\u00ea n\u00e3o poder\u00e1 abortar.<\/p>\n<p>No entanto, redefinir uma mesclagem significa que voc\u00ea reverte os arquivos de volta a um estado conhecido. Voc\u00ea deve considerar essa \u00faltima op\u00e7\u00e3o se o Git n\u00e3o conseguir iniciar a mesclagem. Observe que esse comando excluir\u00e1 <a href=\"https:\/\/kinsta.com\/pt\/blog\/git-delete-local-branch\/\" rel=\"noopener\">todas as altera\u00e7\u00f5es<\/a> que voc\u00ea n\u00e3o confirmar, o que significa que esse ato requer cuidado.<\/p>\n<h3>Verifica\u00e7\u00e3o de conflitos<\/h3>\n<p>A maioria dos conflitos de mesclagem ser\u00e1 simples de ser verificada e resolvida. Entretanto, em alguns casos, talvez voc\u00ea precise se aprofundar mais para descobrir por que um conflito ocorre e como come\u00e7ar a corrigi-lo.<\/p>\n<p>Voc\u00ea pode obter mais contexto ap\u00f3s um <code>git merge<\/code> usando um checkout:<\/p>\n<pre><code class=\"language-bash\">git checkout --conflict=diff3 &lt;filename&gt;\n<\/code><\/pre>\n<p>Isso usa a navega\u00e7\u00e3o t\u00edpica que um checkout fornece e cria uma compara\u00e7\u00e3o entre os dois arquivos que mostra o conflito de mesclagem:<\/p>\n<figure id=\"attachment_155618\" aria-describedby=\"caption-attachment-155618\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155618 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/checkout-merge-conflict.png\" alt=\"Verifica\u00e7\u00e3o de um conflito em um arquivo de projeto espec\u00edfico.\" width=\"1000\" height=\"486\"><figcaption id=\"caption-attachment-155618\" class=\"wp-caption-text\">Verifica\u00e7\u00e3o de um conflito em um arquivo de projeto espec\u00edfico.<\/figcaption><\/figure>\n<p>Em um contexto t\u00e9cnico, isso verificar\u00e1 o arquivo novamente e substituir\u00e1 os marcadores de conflito. Voc\u00ea pode fazer isso algumas vezes durante uma resolu\u00e7\u00e3o. Aqui, se voc\u00ea passar o argumento <code>diff3<\/code>, ele fornecer\u00e1 a vers\u00e3o base e as alternativas nas vers\u00f5es &#8220;ours&#8221; e &#8220;theirs&#8221;.<\/p>\n<p>Observe que a op\u00e7\u00e3o de argumento padr\u00e3o \u00e9 <code>merge<\/code>, que n\u00e3o precisa ser especificado, a menos que voc\u00ea altere o estilo de conflito de mesclagem para diferente do padr\u00e3o.<\/p>\n<h3>Ignorando o espa\u00e7o negativo<\/h3>\n<p>O <a href=\"https:\/\/kinsta.com\/pt\/blog\/melhores-praticas-web-design\/\" rel=\"noopener\">espa\u00e7o negativo<\/a> e seu uso \u00e9 um ponto comum de discuss\u00e3o Algumas <a href=\"https:\/\/kinsta.com\/pt\/blog\/melhor-linguagem-de-programacao\/\" rel=\"noopener\">linguagens de programa\u00e7\u00e3o<\/a> usam tipos diferentes de espa\u00e7amento, e at\u00e9 mesmo desenvolvedores individuais usam formata\u00e7\u00e3o diferente.<\/p>\n<p>A disputa entre espa\u00e7os e tabula\u00e7\u00f5es \u00e9 uma controv\u00e9rsia da qual preferimos ficar de fora. No entanto, se voc\u00ea se deparar com situa\u00e7\u00f5es em que a formata\u00e7\u00e3o varia entre espa\u00e7os e tabula\u00e7\u00f5es dependendo do arquivo e das pr\u00e1ticas de codifica\u00e7\u00e3o, poder\u00e1 enfrentar esse problema ao realizar uma mesclagem no Git.<\/p>\n<p>Voc\u00ea identificar\u00e1 que isso \u00e9 a causa da falha na mesclagem quando houver linhas removidas e adicionadas ao analisar o conflito:<\/p>\n<figure id=\"attachment_155627\" aria-describedby=\"caption-attachment-155627\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155627 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/negative-space-conflict.png\" alt=\"Um arquivo que mostra as diferen\u00e7as de conflito em um editor.\" width=\"1000\" height=\"692\"><figcaption id=\"caption-attachment-155627\" class=\"wp-caption-text\">Um arquivo que mostra as diferen\u00e7as de conflito em um editor.<\/figcaption><\/figure>\n<p>Isso ocorre porque o Git analisa essas linhas e considera o espa\u00e7o negativo como uma altera\u00e7\u00e3o.<\/p>\n<p>No entanto, voc\u00ea pode adicionar argumentos espec\u00edficos ao comando <code>git merge<\/code> que ignorar\u00e3o o espa\u00e7o negativo nos arquivos relevantes:<\/p>\n<pre><code class=\"language-bash\">git merge -Xignore-all-space\n\ngit merge -Xignore-space-change\n<\/code><\/pre>\n<p>Embora esses dois argumentos pare\u00e7am semelhantes, eles t\u00eam uma diferen\u00e7a \u00fanica. Se voc\u00ea optar por ignorar todo o espa\u00e7o negativo, o Git o far\u00e1. \u00c9 uma abordagem ampla, mas, em contraste, o <code>-Xignore-space-change<\/code> s\u00f3 contar\u00e1 as sequ\u00eancias de um ou mais caracteres com espa\u00e7o negativo como equivalentes. Dessa forma, ele ignorar\u00e1 espa\u00e7os simples no final das linhas.<\/p>\n<p>Para maior seguran\u00e7a, voc\u00ea tamb\u00e9m pode revisar a mesclagem usando o comando <code>--no-commit<\/code>, a fim de verificar se voc\u00ea ignora e contabiliza o espa\u00e7o negativo da maneira correta.<\/p>\n<h3>Mesclar registros<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/docs\/devkinsta\/logging\/\" rel=\"noopener\">O registro \u00e9 crucial<\/a> para quase todo software que transmite dados. No Git, voc\u00ea pode usar o registro para obter mais detalhes sobre um conflito de mesclagem. Voc\u00ea pode acessar essas informa\u00e7\u00f5es usando <code>git log<\/code>:<\/p>\n<figure id=\"attachment_155621\" aria-describedby=\"caption-attachment-155621\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155621 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-log-file.png\" alt=\"Executando e visualizando o registro do Git no Terminal.\" width=\"1000\" height=\"537\"><figcaption id=\"caption-attachment-155621\" class=\"wp-caption-text\">Executando e visualizando o registro do Git no Terminal.<\/figcaption><\/figure>\n<p>\u00c9 basicamente um local onde todos os registros de a\u00e7\u00f5es em um reposit\u00f3rio s\u00e3o armazenados em arquivos de texto. No entanto, voc\u00ea pode adicionar argumentos adicionais para personalizar a visualiza\u00e7\u00e3o e ver apenas os commits que deseja:<\/p>\n<pre><code class=\"language-bash\">git log --oneline --left-right &lt;branch1&gt;...&lt;branch2&gt;\n<\/code><\/pre>\n<p>Voc\u00ea pode usar um <a href=\"https:\/\/git-scm.com\/book\/en\/v2\/Git-Tools-Revision-Selection#_triple_dot\" target=\"_blank\" rel=\"noopener noreferrer\">&#8220;ponto triplo&#8221;<\/a> para fornecer uma lista de commits envolvidos em duas branches durante uma mesclagem. Ele filtrar\u00e1 todos os commits que ambas as branches compartilham, o que deixar\u00e1 uma sele\u00e7\u00e3o de commits para voc\u00ea investigar mais.<\/p>\n<p>Voc\u00ea tamb\u00e9m pode usar <code>git log --oneline --left-right --merge<\/code> para mostrar apenas os commits de ambos os lados de uma mesclagem que &#8220;tocam&#8221; um arquivo conflitante. A op\u00e7\u00e3o <code>-p<\/code> mostrar\u00e1 a voc\u00ea as altera\u00e7\u00f5es exatas de um &#8220;diff&#8221; espec\u00edfico, embora voc\u00ea deva observar que isso se aplica somente a commits que n\u00e3o sejam de mesclagem. Existe uma solu\u00e7\u00e3o alternativa para isso, que abordaremos a seguir.<\/p>\n<h3>Usando o formato de diferen\u00e7a combinada para investigar um conflito de mesclagem no Git<\/h3>\n<p>Voc\u00ea pode usar a visualiza\u00e7\u00e3o que obt\u00e9m com <code>git log<\/code> para investigar conflitos de mesclagem. Em circunst\u00e2ncias t\u00edpicas, o Git mesclar\u00e1 o c\u00f3digo e preparar\u00e1 tudo o que for bem-sucedido. Isso far\u00e1 com que voc\u00ea tenha apenas linhas conflitantes e poder\u00e1 v\u00ea-las usando o comando <code>git diff<\/code>:<\/p>\n<figure id=\"attachment_155620\" aria-describedby=\"caption-attachment-155620\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155620 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-diff.png\" alt=\"Executando um comando git diff no Terminal.\" width=\"1000\" height=\"714\"><figcaption id=\"caption-attachment-155620\" class=\"wp-caption-text\">Executando um comando git diff no Terminal.<\/figcaption><\/figure>\n<p>Esse formato de &#8220;combined diff&#8221; adiciona duas colunas extras de informa\u00e7\u00f5es. A primeira informa se uma linha \u00e9 diferente entre o seu branch (&#8220;ours&#8221;) e a c\u00f3pia de trabalho; a segunda fornece a mesma informa\u00e7\u00e3o para o branch &#8220;theirs&#8221;.<\/p>\n<p>Para os sinais, um sinal de mais indica se uma linha \u00e9 uma adi\u00e7\u00e3o \u00e0 c\u00f3pia de trabalho, mas n\u00e3o naquele lado espec\u00edfico da mesclagem, e um sinal de menos indica se a linha foi removida.<\/p>\n<p>Observe que voc\u00ea tamb\u00e9m pode ver esse formato de diff combinado no registro do Git usando alguns comandos:<\/p>\n<pre><code class=\"language-bash\">git show\n\ngit log --cc -p\n<\/code><\/pre>\n<p>O primeiro \u00e9 um comando que voc\u00ea usa em um commit de mesclagem para ver seu hist\u00f3rico. O segundo comando usa a funcionalidade do <code>-p<\/code> para mostrar as altera\u00e7\u00f5es em um commit sem mescla com o formato de diff combinado.<\/p>\n<h2>Como desfazer uma mesclagem do Git<\/h2>\n<p>Erros podem acontecer, e voc\u00ea pode realizar mesclagens que precisam ser revertidas. Em alguns casos, voc\u00ea pode simplesmente alterar o commit mais recente usando <code>git commit --amend<\/code>. Isso abrir\u00e1 o editor para permitir que voc\u00ea modifique a mensagem do \u00faltimo commit.<\/p>\n<p>Embora voc\u00ea <em>possa<\/em> reverter conflitos de mesclagem mais complexos e as altera\u00e7\u00f5es resultantes, isso pode ser dif\u00edcil porque os commits geralmente s\u00e3o permanentes.<\/p>\n<p>Dessa forma, existem muitas etapas que voc\u00ea precisa seguir:<\/p>\n<ul>\n<li>Primeiro, voc\u00ea precisa revisar os commits e encontrar indica\u00e7\u00f5es \u00e0s mesclagens de que precisa.<\/li>\n<li>Em seguida, voc\u00ea deve verificar as branches para analisar os hist\u00f3ricos dos commits.<\/li>\n<li>Ap\u00f3s conhecer as branches e os commits de que voc\u00ea precisa, h\u00e1 <a href=\"https:\/\/kinsta.com\/pt\/blog\/git-avancado\/\">comandos espec\u00edficos do Git<\/a> com base na a\u00e7\u00e3o desejada.<\/li>\n<\/ul>\n<p>Vamos examin\u00e1-los com mais detalhes e come\u00e7ar com o processo de revis\u00e3o. A partir da\u00ed, podemos mostrar uma maneira r\u00e1pida de desfazer uma mesclagem no Git e, em seguida, examinar comandos espec\u00edficos para casos de uso mais avan\u00e7ados.<\/p>\n<h3>Revis\u00e3o de commits<\/h3>\n<p>O comando <code>git log --oneline<\/code> \u00e9 \u00f3timo se voc\u00ea quiser ver os IDs de revis\u00e3o e a mensagem do commit relacionados ao branch atual:<\/p>\n<figure id=\"attachment_155622\" aria-describedby=\"caption-attachment-155622\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155622 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/git-log-oneline.png\" alt=\"Executando um comando git diff de uma linha no Terminal.\" width=\"1000\" height=\"356\"><figcaption id=\"caption-attachment-155622\" class=\"wp-caption-text\">Executando um comando git diff de uma linha no Terminal.<\/figcaption><\/figure>\n<p>O comando <code>git log --branches=*<\/code> mostrar\u00e1 as mesmas informa\u00e7\u00f5es, mas para todas as branches. Independentemente disso, voc\u00ea pode usar os IDs de indica\u00e7\u00e3o juntamente com um <code>git checkout<\/code> para criar um estado &#8216;detached <code>HEAD<\/code>&#8216;. Isso significa que, do ponto de vista t\u00e9cnico, voc\u00ea n\u00e3o trabalhar\u00e1 em nenhuma branch e, quando voltar para uma branch estabelecida, as altera\u00e7\u00f5es ficar\u00e3o &#8220;\u00f3rf\u00e3s&#8221;.<\/p>\n<p>Dessa forma, voc\u00ea pode usar o checkout como uma \u00e1rea de teste sem riscos. No entanto, caso queira preservar as altera\u00e7\u00f5es, voc\u00ea pode fazer o checkout da branch e <a href=\"https:\/\/kinsta.com\/pt\/blog\/git-rename-branch\/\" target=\"_blank\" rel=\"noopener noreferrer\">dar a ela um novo nome<\/a> usando <code>git checkout -b &lt;branch-name&gt;<\/code>. Essa \u00e9 uma maneira s\u00f3lida de desfazer uma mesclagem do Git, mas existem maneiras mais detalhadas de fazer isso para casos de uso avan\u00e7ados.<\/p>\n<h3>Usando o git reset<\/h3>\n<p>Muitos dos seus conflitos de mesclagem podem ocorrer em um reposit\u00f3rio local. Nesses casos, <code>git reset<\/code> \u00e9 o comando de que voc\u00ea precisa. No entanto, esse comando tem mais par\u00e2metros e argumentos que voc\u00ea precisa conhecer. Veja a seguir como voc\u00ea usa o comando na pr\u00e1tica:<\/p>\n<pre><code class=\"language-bash\">git reset --hard &lt;reference&gt;\n<\/code><\/pre>\n<p>A primeira parte &#8211; <code>git reset --hard<\/code> &#8211; passa por tr\u00eas etapas:<\/p>\n<ul>\n<li>Ele move o branch de refer\u00eancia para sua localiza\u00e7\u00e3o antes do commit de mesclagem.<\/li>\n<li>O hard reset faz com que o &#8220;\u00edndice&#8221; (ou seja, o pr\u00f3ximo ponto de controle de commit proposto) se pare\u00e7a com o branch de indica\u00e7\u00e3o.<\/li>\n<li>Faz com que o diret\u00f3rio de trabalho se pare\u00e7a com o \u00edndice.<\/li>\n<\/ul>\n<p>Quando voc\u00ea realiza esse comando, o hist\u00f3rico de commits remove os commits posteriores e redefine o hist\u00f3rico para o ID referenciado. \u00c9 uma maneira limpa de desfazer uma mesclagem do Git, mas n\u00e3o \u00e9 adequada para todos os casos.<\/p>\n<p>Por exemplo, voc\u00ea causar\u00e1 um erro se tentar enviar um commit de redefini\u00e7\u00e3o local para um <a href=\"https:\/\/kinsta.com\/pt\/blog\/gitlab-vs-github\/\" rel=\"noopener\">reposit\u00f3rio remoto<\/a> que contenha esse commit. Nesse cen\u00e1rio, h\u00e1 outro comando que voc\u00ea pode usar.<\/p>\n<h3>Usando o git revert<\/h3>\n<p>Embora <code>git reset<\/code> e <code>git revert<\/code> pare\u00e7am semelhantes, existem algumas diferen\u00e7as importantes. Nos exemplos at\u00e9 agora, o processo de desfazer envolve mover os ponteiros de refer\u00eancia e o HEAD para um commit espec\u00edfico. \u00c9 como se voc\u00ea estivesse embaralhando cartas de baralho para criar uma nova ordem.<\/p>\n<p>Por outro lado, o <code>git revert<\/code> cria um novo commit com base nas altera\u00e7\u00f5es de backtracking, atualiza os ponteiros de refer\u00eancia e torna o branch a nova &#8220;ponta&#8221; \u00c9 tamb\u00e9m por isso que voc\u00ea deve usar esse comando para conflitos de mesclagem de reposit\u00f3rio remoto.<\/p>\n<p>Voc\u00ea pode usar o <code>git revert &lt;reference&gt;<\/code> para desfazer uma mesclagem do Git. Observe que voc\u00ea sempre precisa especificar uma indica\u00e7\u00e3o de commit, ou o comando n\u00e3o ser\u00e1 executado. Voc\u00ea tamb\u00e9m pode passar <code>HEAD<\/code> para o comando para reverter para o commit mais recente.<\/p>\n<p>No entanto, voc\u00ea pode dar ao Git mais clareza sobre o que deseja fazer:<\/p>\n<pre><code class=\"language-bash\">git revert -m 1 &lt;reference&gt;\n<\/code><\/pre>\n<p>Quando voc\u00ea executar a mesclagem, o novo commit ter\u00e1 duas &#8220;origens&#8221; Uma est\u00e1 relacionada \u00e0 indica\u00e7\u00e3o que voc\u00ea especificou e a outra \u00e9 a ponta do branch que voc\u00ea deseja mesclar. Nesse caso, <code>-m 1<\/code> diz ao Git para manter a primeira origem &#8211; ou seja, a indica\u00e7\u00e3o especificada &#8211; como a &#8220;linha principal&#8221;<\/p>\n<p>A op\u00e7\u00e3o padr\u00e3o para <code>git revert<\/code> \u00e9 <code>-e<\/code> ou <code>--edit<\/code>. Isso abrir\u00e1 o editor para que voc\u00ea possa alterar a mensagem de confirma\u00e7\u00e3o antes de reverter. No entanto, voc\u00ea tamb\u00e9m pode passar <code>--no-edit<\/code>, que n\u00e3o abrir\u00e1 o editor.<\/p>\n<p>Voc\u00ea tamb\u00e9m pode passar <code>-n<\/code> ou <code>--no-commit<\/code>. Isso diz a <code>git revert<\/code> para <em>n\u00e3o<\/em> criar um novo commit, mas &#8220;inverter&#8221; as altera\u00e7\u00f5es e adicion\u00e1-las ao \u00edndice de teste e ao diret\u00f3rio de trabalho.<\/p>\n<h2>A diferen\u00e7a entre merge e rebase no Git<\/h2>\n<p>Em vez de usar o comando <code>git merge<\/code>, voc\u00ea tamb\u00e9m pode usar <code>git rebase<\/code>. Essa tamb\u00e9m \u00e9 uma maneira de integrar as altera\u00e7\u00f5es em um diret\u00f3rio, mas com uma diferen\u00e7a:<\/p>\n<ul>\n<li>Uma mesclagem de tr\u00eas vias \u00e9 o padr\u00e3o quando voc\u00ea usa <code>git merge<\/code>. Ele combina pontos de controle de dois branches atuais e os mescla com um antecessor comum de ambos para criar um novo commit.<\/li>\n<li>O rebasing envolve pegar uma altera\u00e7\u00e3o corrigida de uma branch divergente e aplic\u00e1-la a outra, sem a necessidade do antecessor. Isso significa que n\u00e3o haver\u00e1 um novo commit.<\/li>\n<\/ul>\n<p>Para usar esse comando, fa\u00e7a checkout em uma branch para a qual voc\u00ea gostaria de fazer rebase. A partir da\u00ed, voc\u00ea pode usar o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">git rebase -i &lt;reference&gt;\n<\/code><\/pre>\n<p>Em muitas situa\u00e7\u00f5es, sua indica\u00e7\u00e3o ser\u00e1 o branch principal. A op\u00e7\u00e3o <code>-i<\/code> inicia o &#8220;rebase interativo&#8221; Isso d\u00e1 a voc\u00ea a oportunidade de alterar os commits \u00e0 medida que eles se movem. Voc\u00ea pode usar isso para limpar o hist\u00f3rico de commits, que \u00e9 uma das grandes vantagens de usar <code>git rebase<\/code>.<\/p>\n<p>Ao executar o comando, voc\u00ea ver\u00e1 uma lista de poss\u00edveis commits a serem movidos no editor. Isso d\u00e1 a voc\u00ea um escopo completo para alterar a apar\u00eancia do hist\u00f3rico de commits. Voc\u00ea tamb\u00e9m pode mesclar commits se alterar o comando <code>pick<\/code> para <code>fixup<\/code>. Quando voc\u00ea salvar as altera\u00e7\u00f5es, o Git executar\u00e1 o rebase.<\/p>\n<p>De modo geral, voc\u00ea usa o Git Merge para muitos conflitos. No entanto, o rebase tamb\u00e9m tem muitos benef\u00edcios. Por exemplo, embora o merge seja simples de usar e permita que voc\u00ea preserve o contexto em torno do seu hist\u00f3rico de merge, o rebase pode ser mais limpo, pois voc\u00ea pode simplificar o hist\u00f3rico de commits em um s\u00f3.<\/p>\n<p>Apesar disso, voc\u00ea precisa tomar mais cuidado com o rebase, pois o potencial de erros \u00e9 enorme. Al\u00e9m disso, voc\u00ea n\u00e3o deve usar essa t\u00e9cnica em branches p\u00fablicas, pois o rebase afetar\u00e1 apenas o seu reposit\u00f3rio. Para corrigir os problemas resultantes, voc\u00ea precisar\u00e1 fazer ainda mais mesclagens e ver\u00e1 v\u00e1rios commits.<\/p>\n<h2>Ferramentas que ajudam voc\u00ea a gerenciar melhor uma mesclagem no Git<\/h2>\n<p>Dadas as complexidades que envolvem os conflitos de mesclagem no Git, talvez voc\u00ea queira uma ajuda. Existem muitas ferramentas dispon\u00edveis para ajud\u00e1-lo a realizar uma mesclagem bem-sucedida e, se voc\u00ea usa o <a href=\"https:\/\/kinsta.com\/pt\/blog\/php-editor\/\" rel=\"noopener\">Intellij IDEA<\/a>, tem um m\u00e9todo integrado usando o menu <strong>Branches<\/strong>:<\/p>\n<figure id=\"attachment_155624\" aria-describedby=\"caption-attachment-155624\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155624 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/intellij-branches.png\" alt=\"Verificando uma branch no Intellij IDEA.\" width=\"1000\" height=\"378\"><figcaption id=\"caption-attachment-155624\" class=\"wp-caption-text\">Verificando uma branch no Intellij IDEA.<\/figcaption><\/figure>\n<p>Os usu\u00e1rios mais antigos do Atom descobrir\u00e3o que a Microsoft manteve sua fant\u00e1stica <a href=\"https:\/\/kinsta.com\/pt\/blog\/git-vs-github\/\" target=\"_blank\" rel=\"noopener noreferrer\">integra\u00e7\u00e3o com o Git<\/a>, com a capacidade de <a href=\"https:\/\/kinsta.com\/pt\/blog\/que-github\/\" rel=\"noopener\">se conectar ao GitHub<\/a> sem outras extens\u00f5es ou complementos.<\/p>\n<p>Voc\u00ea tamb\u00e9m tem mais op\u00e7\u00f5es usando a <strong>Command Palette<\/strong>. Isso acontece at\u00e9 mesmo em editores que se baseiam no framework de c\u00f3digo aberto do VSCode, como o <a href=\"https:\/\/www.onivim.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Onivim2<\/a>:<\/p>\n<figure id=\"attachment_155628\" aria-describedby=\"caption-attachment-155628\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155628 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/onivim-git-merge.png\" alt=\"Ao acessar o comando Git: Merge Branch a partir da paleta de comandos no Onivim2.\" width=\"1000\" height=\"396\"><figcaption id=\"caption-attachment-155628\" class=\"wp-caption-text\">Ao acessar o comando Git: Merge Branch a partir da paleta de comandos no Onivim2.<\/figcaption><\/figure>\n<p>A vantagem aqui, como \u00e9 o caso de todas as ferramentas desta lista, \u00e9 que voc\u00ea n\u00e3o precisa da linha de comando para realizar mesclagens. Normalmente, voc\u00ea precisa selecionar um branch de origem e um branch de destino em um menu suspenso e, em seguida, deixar que o editor realize a mesclagem. Mesmo assim, voc\u00ea n\u00e3o precisa adotar uma abordagem sem interven\u00e7\u00e3o. Voc\u00ea pode revisar as altera\u00e7\u00f5es depois e, em seguida, fazer o commit de que precisa.<\/p>\n<p>Um editor que oferece uma interface gr\u00e1fica de usu\u00e1rio (GUI) separada para trabalhar com o Git \u00e9 o <a href=\"https:\/\/kinsta.com\/pt\/blog\/como-usar-sublime-text\/\" rel=\"noopener\">Sublime Text<\/a>. Se voc\u00ea usa esse editor, o <a href=\"https:\/\/www.sublimemerge.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Sublime Merge<\/a> pode ser um complemento ideal para o seu fluxo de trabalho:<\/p>\n<figure id=\"attachment_155629\" aria-describedby=\"caption-attachment-155629\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155629 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/sublime-merge.png\" alt=\"O aplicativo Sublime Merge.\" width=\"1000\" height=\"498\"><figcaption id=\"caption-attachment-155629\" class=\"wp-caption-text\">O aplicativo Sublime Merge.<\/figcaption><\/figure>\n<p>Independentemente da escolha do editor de c\u00f3digo que voc\u00ea fizer, ele geralmente incluir\u00e1 a capacidade de trabalhar com o Git sem usar a linha de comando. Isso acontece at\u00e9 mesmo com o Vim e o Neovim, usando o plugin <a href=\"https:\/\/github.com\/tpope\/vim-fugitive\" target=\"_blank\" rel=\"noopener noreferrer\">Git Fugitive de Tim Pope<\/a>, que \u00e9 fant\u00e1stico e simples de usar.<\/p>\n<p>No entanto, existem algumas ferramentas de mesclagem de terceiros dedicadas que se concentram exclusivamente nessa tarefa.<\/p>\n<h3>Aplicativos dedicados de mesclagem do Git<\/h3>\n<p>Por exemplo, o <a href=\"https:\/\/mergify.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Mergify<\/a> \u00e9 uma forma de n\u00edvel empresarial de mesclar c\u00f3digo que se integra ao fluxo de trabalho e ao pipeline de integra\u00e7\u00e3o cont\u00ednua\/entrega cont\u00ednua (CI\/CD):<\/p>\n<figure id=\"attachment_155626\" aria-describedby=\"caption-attachment-155626\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155626 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/mergify-app.png\" alt=\"O site do Mergify.\" width=\"1000\" height=\"640\"><figcaption id=\"caption-attachment-155626\" class=\"wp-caption-text\">O site do Mergify.<\/figcaption><\/figure>\n<p>Alguns dos recursos aqui ajudam voc\u00ea a automatizar a atualiza\u00e7\u00e3o de suas solicita\u00e7\u00f5es pull antes da mesclagem, reorden\u00e1-las com base na prioridade e tamb\u00e9m coloc\u00e1-las em lote. Para uma solu\u00e7\u00e3o de c\u00f3digo aberto, o <a href=\"http:\/\/meldmerge.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Meld<\/a> pode ser \u00fatil:<\/p>\n<figure id=\"attachment_155625\" aria-describedby=\"caption-attachment-155625\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155625 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/06\/meld-app.png\" alt=\"A interface do aplicativo Meld.\" width=\"1000\" height=\"651\"><figcaption id=\"caption-attachment-155625\" class=\"wp-caption-text\">A interface do aplicativo Meld.<\/figcaption><\/figure>\n<p>Sua vers\u00e3o est\u00e1vel \u00e9 compat\u00edvel com Windows e <a href=\"https:\/\/kinsta.com\/pt\/blog\/comandos-linux\/\" rel=\"noopener\">Linux<\/a> e \u00e9 executada sob a <a href=\"https:\/\/kinsta.com\/pt\/aprenda\/wordpress-gpl\/\" rel=\"noopener\">licen\u00e7a GPL<\/a>. Isso oferece a voc\u00ea a funcionalidade b\u00e1sica para comparar branches, editar suas mesclagens e muito mais. Voc\u00ea ainda obt\u00e9m compara\u00e7\u00f5es de duas ou tr\u00eas vias e suporte para outros <a href=\"https:\/\/kinsta.com\/pt\/blog\/controle-de-versoes-wordpress\/\" rel=\"noopener\">sistemas de controle de vers\u00e3o<\/a>, como o <a href=\"https:\/\/subversion.apache.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Subversion<\/a>.<\/p>\n<h2>Resumo<\/h2>\n<p>O Git \u00e9 uma ferramenta essencial para voc\u00ea colaborar e gerenciar as altera\u00e7\u00f5es de c\u00f3digo com efici\u00eancia. No entanto, se v\u00e1rios desenvolvedores trabalharem no mesmo c\u00f3digo, podem surgir conflitos. As estrat\u00e9gias de mesclagem do Git ajudar\u00e3o voc\u00ea a resolver esses conflitos, e existem muitas maneiras de fazer o trabalho. Para estrat\u00e9gias de mesclagem do Git mais complexas, voc\u00ea precisa recorrer a t\u00e1ticas avan\u00e7adas.<\/p>\n<p>Isso pode at\u00e9 ser t\u00e3o simples quanto ignorar o espa\u00e7o negativo ou vasculhar os registros de pesquisa. No entanto, voc\u00ea tamb\u00e9m n\u00e3o precisa usar sempre a linha de comando. H\u00e1 muitos aplicativos para ajudar voc\u00ea e o seu editor de c\u00f3digo tamb\u00e9m costuma usar uma interface integrada.<\/p>\n<p>Se voc\u00ea quiser garantir a <a href=\"https:\/\/sevalla.com\/application-hosting\/\">hospedagem de aplicativos<\/a> de alta qualidade, temos o que voc\u00ea precisa. Nossos servi\u00e7os de hospedagem de aplicativos baseados na nuvem garantem que seu aplicativo Full-Stack esteja pronto em pouco tempo.<\/p>\n<p>Qual dessas estrat\u00e9gias de mesclagem do Git tirar\u00e1 voc\u00ea de uma situa\u00e7\u00e3o dif\u00edcil? Diga-nos na se\u00e7\u00e3o de coment\u00e1rios abaixo!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Com o trabalho que acontece em um projeto de desenvolvimento,\u00a0o Git \u00e9 uma ferramenta fundamental. No entanto, quando voc\u00ea tem muitos colaboradores no projeto, ocasionalmente eles &#8230;<\/p>\n","protected":false},"author":199,"featured_media":60589,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[969],"class_list":["post-60588","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-git"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Como Executar Tarefas Complexas de Mesclagem (Merge) no Git - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Se voc\u00ea tiver muitos commits para processar, alguns entrar\u00e3o em conflito com outros e exigir\u00e3o uma mesclagem. Este artigo discute como realizar tarefas complexas de mesclagem no Git!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como Executar Tarefas Complexas de Mesclagem (Merge) no Git\" \/>\n<meta property=\"og:description\" content=\"Se voc\u00ea tiver muitos commits para processar, alguns entrar\u00e3o em conflito com outros e exigir\u00e3o uma mesclagem. Este artigo discute como realizar tarefas complexas de mesclagem no Git!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-29T10:29:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-06T08:07:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Se voc\u00ea tiver muitos commits para processar, alguns entrar\u00e3o em conflito com outros e exigir\u00e3o uma mesclagem. Este artigo discute como realizar tarefas complexas de mesclagem no Git!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Como Executar Tarefas Complexas de Mesclagem (Merge) no Git\",\"datePublished\":\"2023-10-29T10:29:36+00:00\",\"dateModified\":\"2023-11-06T08:07:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/\"},\"wordCount\":4632,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/\",\"name\":\"Como Executar Tarefas Complexas de Mesclagem (Merge) no Git - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg\",\"datePublished\":\"2023-10-29T10:29:36+00:00\",\"dateModified\":\"2023-11-06T08:07:53+00:00\",\"description\":\"Se voc\u00ea tiver muitos commits para processar, alguns entrar\u00e3o em conflito com outros e exigir\u00e3o uma mesclagem. Este artigo discute como realizar tarefas complexas de mesclagem no Git!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/git\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Como Executar Tarefas Complexas de Mesclagem (Merge) no Git\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como Executar Tarefas Complexas de Mesclagem (Merge) no Git - Kinsta\u00ae","description":"Se voc\u00ea tiver muitos commits para processar, alguns entrar\u00e3o em conflito com outros e exigir\u00e3o uma mesclagem. Este artigo discute como realizar tarefas complexas de mesclagem no Git!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/","og_locale":"pt_PT","og_type":"article","og_title":"Como Executar Tarefas Complexas de Mesclagem (Merge) no Git","og_description":"Se voc\u00ea tiver muitos commits para processar, alguns entrar\u00e3o em conflito com outros e exigir\u00e3o uma mesclagem. Este artigo discute como realizar tarefas complexas de mesclagem no Git!","og_url":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-10-29T10:29:36+00:00","article_modified_time":"2023-11-06T08:07:53+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Se voc\u00ea tiver muitos commits para processar, alguns entrar\u00e3o em conflito com outros e exigir\u00e3o uma mesclagem. Este artigo discute como realizar tarefas complexas de mesclagem no Git!","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tempo estimado de leitura":"22 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Como Executar Tarefas Complexas de Mesclagem (Merge) no Git","datePublished":"2023-10-29T10:29:36+00:00","dateModified":"2023-11-06T08:07:53+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/"},"wordCount":4632,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/","url":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/","name":"Como Executar Tarefas Complexas de Mesclagem (Merge) no Git - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg","datePublished":"2023-10-29T10:29:36+00:00","dateModified":"2023-11-06T08:07:53+00:00","description":"Se voc\u00ea tiver muitos commits para processar, alguns entrar\u00e3o em conflito com outros e exigir\u00e3o uma mesclagem. Este artigo discute como realizar tarefas complexas de mesclagem no Git!","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/06\/git-merge.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/git-mesclagem\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Git","item":"https:\/\/kinsta.com\/pt\/topicos\/git\/"},{"@type":"ListItem","position":3,"name":"Como Executar Tarefas Complexas de Mesclagem (Merge) no Git"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/pt\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/60588","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=60588"}],"version-history":[{"count":12,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/60588\/revisions"}],"predecessor-version":[{"id":64473,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/60588\/revisions\/64473"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60588\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60588\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60588\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60588\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60588\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60588\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60588\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60588\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/60588\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/60589"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=60588"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=60588"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=60588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}