{"id":265,"date":"2021-05-30T23:46:13","date_gmt":"2021-05-30T23:46:13","guid":{"rendered":"http:\/\/jplatz.com.br\/syntax\/?p=265"},"modified":"2021-09-13T01:31:08","modified_gmt":"2021-09-13T01:31:08","slug":"git-checkout-para-restaurar-um-unico-arquivo-ja-comitado","status":"publish","type":"post","link":"https:\/\/jplatz.com.br\/syntax\/2021\/05\/30\/git-checkout-para-restaurar-um-unico-arquivo-ja-comitado\/","title":{"rendered":"GIT CHECKOUT Para Restaurar um \u00danico Arquivo j\u00e1 Comitado"},"content":{"rendered":"\n<pre class=\"wp-block-preformatted\">git log\n\/\/ encontre o hash da vers\u00e3o que voc\u00ea deseja retornar um arquivo\ngit checkout &lt;commit hash> &lt;caminho-completo-para-o-arquivo-desejado>\ngit status\ngit commit<\/pre>\n\n\n\n<p>Devs utilizando a metodologia &#8220;<strong><em>PMF<\/em><\/strong>&#8221; est\u00e3o em constante evolu\u00e7\u00e3o de seus c\u00f3digos e muitas vezes podem acabar numa sinuca de bico e invariavelmente em algum momento podem querer reverter suas altera\u00e7\u00f5es.<\/p>\n\n\n\n<p>Mas e se a revers\u00e3o a ser feita envolve apenas um \u00fanico arquivo e usar o <em>git reset <\/em>pode dar aquele medo de piorar as coisas?<\/p>\n\n\n\n<p>Bom, nessas horas voc\u00ea pode fazer uso do <em>git checkout <\/em>mesmo, afinal este comando \u00e9 bastante comum pois usamos este comando o tempo todo, ent\u00e3o n\u00e3o haveria raz\u00e3o para ter medo de us\u00e1-lo. Haveria?<\/p>\n\n\n\n<p>A sacada aqui \u00e9 apenas combinar o <em>git checkout<\/em> com o hash do commit que tem a vers\u00e3o do arquivo a ser restaurado adicionando-se tamb\u00e9m o caminho completo para o arquivo desejado. A vers\u00e3o do arquivo ent\u00e3o \u00e9 baixada para a &#8220;<em>working area<\/em>&#8221; e depois de voc\u00ea verificar o conte\u00fado dele basta apenas comitar novamente o arquivo para o reposit\u00f3rio.<\/p>\n\n\n\n<p>\u00c9 claro que voc\u00ea poderia alcan\u00e7ar o mesmo resultado com outros comandos <strong>GIT<\/strong> como o <strong>reset<\/strong> ou o <strong>revert<\/strong>. Mas se o git checkout faz este trabalho pra voc\u00ea com uma sintaxe extremamente limpa, pra que complicar?<\/p>\n\n\n\n<p>Vale ressaltar que este fluxo o <em>git checkout <\/em>n\u00e3o ir\u00e1 funcionar para arquivos novos que acabaram de ser comitados, isto por que um arquivo novo n\u00e3o existir\u00e1 em um <em>commit hash<\/em> anterior e no <em>commit hash<\/em> atual ele \u00e9 o que \u00e9, um arquivo novo. <\/p>\n\n\n\n<p>Nesta situa\u00e7\u00e3o \u00e9 recomendado o uso do <strong>git rm<\/strong> que ir\u00e1 funcionar perfeitamente para esta necessidade&#8230; eu j\u00e1 escrevi um artigo sobre <em>git rm<\/em> aqui no blog, recomendo dar uma olhada nele para maiores detalhes de uso.<\/p>\n\n\n\n<p>Agora sem complica\u00e7\u00f5es, vai de <strong><em>git checkout<\/em><\/strong> bro! &#8230;ou de <em><strong>git rm<\/strong><\/em> quando for um arquivo novo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>git log \/\/ encontre o hash da vers\u00e3o que voc\u00ea deseja retornar um arquivo git checkout &lt;commit hash> &lt;caminho-completo-para-o-arquivo-desejado> git status git commit Devs utilizando a metodologia &#8220;PMF&#8221; est\u00e3o em constante evolu\u00e7\u00e3o de seus c\u00f3digos e muitas vezes podem acabar numa sinuca de bico e invariavelmente em algum momento podem querer reverter suas altera\u00e7\u00f5es. Mas [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33,35],"tags":[134],"class_list":["post-265","post","type-post","status-publish","format-standard","hentry","category-dev-ops","category-git","tag-git-checkout"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/comments?post=265"}],"version-history":[{"count":6,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/265\/revisions"}],"predecessor-version":[{"id":318,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/265\/revisions\/318"}],"wp:attachment":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/media?parent=265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/categories?post=265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/tags?post=265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}