2011-06-17 12 views
44

He realizado varias confirmaciones en una sucursal local, pero no estoy seguro de cuál es la mejor forma de diferir lo que actualmente tengo del estado inicial de mi sucursal. Sé que puedo hacer algo como git diff HEAD HEAD~6 si ha habido 6 confirmaciones en mi sucursal, pero esperaba algo independiente de la cantidad de confirmaciones.En Git, ¿cómo difiero al primer compromiso de mi sucursal?

Edité: No mencioné esto: esperaba no tener que buscar en el registro para obtener el hash de la confirmación desde la que me ramifiqué. Si tuviera 80 commits por ejemplo, esta no sería una tarea divertida.

Además, supongamos que la rama original desde la que me ramifiqué ya ha tenido varios cambios.

Respuesta

64

Usted querrá utilizar la sintaxis con punto de triple descrito en git help diff:

git diff otherbranch... 

Esto es lo mismo que:

git diff otherbranch...HEAD 

que es lo mismo que:

git diff $(git merge-base otherbranch HEAD) HEAD 

El comando merge-base imprime el "mejor" ancestro común (más reciente), por lo que mmand muestra la diferencia de la confirmación más reciente que HEAD tiene en común con otherbranch a HEAD.

Tenga en cuenta que puede usar @{u} en lugar de otherbranch para ver los cambios que ha realizado ya que divergió de la rama ascendente. Consulte git help revisions para obtener detalles sobre la sintaxis.

+2

Aprendí mucho sobre Git en esta respuesta. ¡Gracias! – Newtang

0

git diff <SHA-1 of the commit from which you branched>..HEAD

Puede obtener el SHA-1 de su punto de ramificación haciendo una git log.

+5

Sí, esto funciona. Supongo que esperaba una solución que no me impidiera explorar el registro para encontrar el hash SHA-1. (Como, si tuviera 80 confirmaciones locales, por ejemplo). – Newtang

Cuestiones relacionadas