{"id":625,"date":"2023-12-12T10:43:55","date_gmt":"2023-12-12T10:43:55","guid":{"rendered":"https:\/\/blogs.ua.es\/jpm33\/?p=625"},"modified":"2023-12-12T10:43:55","modified_gmt":"2023-12-12T10:43:55","slug":"git-como-hacer-un-parche-de-un-commits-dado","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/jpm33\/2023\/12\/12\/git-como-hacer-un-parche-de-un-commits-dado\/","title":{"rendered":"GIT C\u00f3mo hacer un parche de un commit(s) dado"},"content":{"rendered":"\r\n<h1>Introducci\u00f3n<\/h1>\r\n<p>Relacionado:\u00a0<a href=\"https:\/\/blogs.ua.es\/jpm33\/2023\/07\/19\/git-coomo-hacer-un-parche-con-los-cambios-actuales\/\">GIT: C\u00f3mo hacer un parche con los cambios actuales<\/a><\/p>\r\n<p>El caso en esta entrada puede ser conocido por muchos usurios veteranos de git y por los n\u00f3veles que no hayan conocido c\u00f3mo solucionarlo.<\/p>\r\n<p>En nuestro trabajo diario, tenemos que compartir uno o varios cambios que est\u00e1n en el hist\u00f3rico de git o en una rama local de trabajo y queremos compartir esos combios ya sea como soluci\u00f3n a un problema o para pasarle una tarea a un compa\u00f1ero o lo que sea, \u00bfc\u00f3mo lo hacemos?<\/p>\r\n<p><!--more--><\/p>\r\n<p><strong>Procedimiento<\/strong><\/p>\r\n<p>En nuestro caso de prueba tenemos un sencillo proyecto Java que ha sufrido los siguientes cambios:<\/p>\r\n<pre>\u03bb <strong>git log --oneline --decorate --stat<\/strong><br \/>1acfa11 (HEAD -&gt; master) A\u00f1ado Greeter a main()<br \/>my-app\/src\/main\/java\/com\/mycompany\/app\/App.java | 7 ++-----<br \/>1 file changed, 2 insertions(+), 5 deletions(-)<br \/>6390003 A\u00f1ado README y CHANGELOG<br \/>CHANGELOG.txt | 1 +<br \/>README.txt | 1 +<br \/>2 files changed, 2 insertions(+)<br \/><strong>a1026ac A\u00f1ado el saludo y el test<\/strong><br \/><strong>my-app\/src\/main\/java\/com\/mycompany\/app\/Greeter.java | 8 ++++++++<\/strong><br \/><strong>my-app\/src\/test\/java\/com\/mycompany\/app\/GreeterTest.java | 17 +++++++++++++++++<\/strong><br \/><strong>2 files changed, 25 insertions(+)<\/strong><br \/>0b9b666 Proyecto creado<br \/>my-app\/pom.xml | 75 ++++++++++++++++++++++<br \/>my-app\/src\/main\/java\/com\/mycompany\/app\/App.java | 13 ++++<br \/>...\/src\/test\/java\/com\/mycompany\/app\/AppTest.java | 20 ++++++<br \/>3 files changed, 108 insertions(+)<br \/>3f1a831 Commit inicial<br \/>.gitignore | 23 +++++++++++++++++++++++<br \/>1 file changed, 23 insertions(+)<\/pre>\r\n<p>Para el caso que nos ocupa, he resaltado el commit con id &#8220;<strong>a1026ac<\/strong>&#8221; que a\u00f1ade dos ficheros, un POJO y un test.<\/p>\r\n<p>La forma de obtener un parche que incluya los cambios de este commit es:<\/p>\r\n<pre>\u03bb <strong>git format-patch -1 a1026ac<\/strong><br \/>0001-A-ado-el-saludo-y-el-test.patch<\/pre>\r\n<p>Que genera el siguiente fichero (0001-A-ado-el-saludo-y-el-test.patch) de parche (en realidad es un diff de git):<\/p>\r\n<pre>From a1026acd8163159a3702c8f79c148c672beaaaba Mon Sep 17 00:00:00 2001<br \/>From: Jose PEREZ &lt;XXXXXXX@XXXXXXXXXX.com&gt;<br \/>Date: Tue, 12 Dec 2023 11:27:44 +0100<br \/>Subject: [PATCH] =?UTF-8?q?A=C3=B1ado=20el=20saludo=20y=20el=20test?=<br \/>MIME-Version: 1.0<br \/>Content-Type: text\/plain; charset=UTF-8<br \/>Content-Transfer-Encoding: 8bit<br \/><br \/>---<br \/>...\/main\/java\/com\/mycompany\/app\/Greeter.java | 8 ++++++++<br \/>...\/java\/com\/mycompany\/app\/GreeterTest.java | 17 +++++++++++++++++<br \/>2 files changed, 25 insertions(+)<br \/>create mode 100644 my-app\/src\/main\/java\/com\/mycompany\/app\/Greeter.java<br \/>create mode 100644 my-app\/src\/test\/java\/com\/mycompany\/app\/GreeterTest.java<br \/><br \/>diff --git a\/my-app\/src\/main\/java\/com\/mycompany\/app\/Greeter.java b\/my-app\/src\/main\/java\/com\/mycompany\/app\/Greeter.java<br \/>new file mode 100644<br \/>index 0000000..a17c7f1<br \/>--- \/dev\/null<br \/>+++ b\/my-app\/src\/main\/java\/com\/mycompany\/app\/Greeter.java<br \/>@@ -0,0 +1,8 @@<br \/>+package com.mycompany.app;<br \/>+<br \/>+public class HelloWorld {<br \/>+ public static void main(String[] args) {<br \/>+ Greeter greeter = new Greeter();<br \/>+ System.out.println(greeter.sayHello());<br \/>+ }<br \/>+}<br \/>diff --git a\/my-app\/src\/test\/java\/com\/mycompany\/app\/GreeterTest.java b\/my-app\/src\/test\/java\/com\/mycompany\/app\/GreeterTest.java<br \/>new file mode 100644<br \/>index 0000000..b9b87f0<br \/>--- \/dev\/null<br \/>+++ b\/my-app\/src\/test\/java\/com\/mycompany\/app\/GreeterTest.java<br \/>@@ -0,0 +1,17 @@<br \/>+package com.mycompany.app;<br \/>+<br \/>+import static org.hamcrest.CoreMatchers.containsString;<br \/>+import static org.junit.Assert.*;<br \/>+<br \/>+import org.junit.Test;<br \/>+<br \/>+public class GreeterTest {<br \/>+<br \/>+ private Greeter greeter = new Greeter();<br \/>+<br \/>+ @Test<br \/>+ public void greeterSaysHello() {<br \/>+ assertThat(greeter.sayHello(), containsString(\"Hello\"));<br \/>+ }<br \/>+<br \/>+}<br \/>--<br \/>2.29.1.windows.1<\/pre>\r\n<p>De esta forma podemos compartir s\u00f3lo los cambios en estos dos ficheros en ese commit dado.<\/p>\r\n<h1>\u00bfQu\u00e9 es la opci\u00f3n -1 y pasa si usamos otro valor?<\/h1>\r\n<p>Ese -1 indica cuantos parches generamos a partir de un commit dado. En nuestro ejemplo -1 indica que desde el commit a1026ac s\u00f3lo queremos un parche, y genera un \u00fanico parche. Si desde ese commit queremos un parche para los 3 commits anteriores ejecutamos:<\/p>\r\n<pre>\u03bb <strong>git format-patch -3 a1026ac<\/strong><br \/>0001-Commit-inicial.patch<br \/>0002-Proyecto-creado.patch<br \/>0003-A-ado-el-saludo-y-el-test.patch<\/pre>\r\n<p>Que nos crea los 3 ficheros de parche para cada commit en orden del mas antiguo hasta el commit indicado (que ser\u00e1 el 003). De este modo podemos aplicar los parches en orden.<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n Relacionado:\u00a0GIT: C\u00f3mo hacer un parche con los cambios actuales El caso en esta entrada puede ser conocido por muchos usurios veteranos de git y por los n\u00f3veles que no hayan conocido c\u00f3mo solucionarlo. En nuestro trabajo diario, tenemos que &hellip; <a href=\"https:\/\/blogs.ua.es\/jpm33\/2023\/12\/12\/git-como-hacer-un-parche-de-un-commits-dado\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3080,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[135,374,10656],"tags":[6236,236729,236718,281],"class_list":["post-625","post","type-post","status-publish","format-standard","hentry","category-linux","category-programacion","category-windows-2","tag-git","tag-linux","tag-programacion-2","tag-windows"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/users\/3080"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/comments?post=625"}],"version-history":[{"count":4,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/625\/revisions"}],"predecessor-version":[{"id":631,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/625\/revisions\/631"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/media?parent=625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/categories?post=625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/tags?post=625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}