2010-08-29 17 views
11

Compruebo algunos commits en Git usando git rebase -i origin/master como se menciona en ReinH.com.Obteniendo la información de commits aplastados en Git

Después de aplastar algunas confirmaciones, ¿hay alguna manera de ver las confirmaciones originales? ¿Es posible obtener "diff" de los commits? ¿Puedo obtener el SHA?

Si es posible, ¿aún es posible después de ejecutar git gc?

Respuesta

18

El objetivo de aplastar es reescribir el historial, reemplazando las confirmaciones originales por una confirmación única.

Dicho esto, es difícil hacer que las cosas realmente desaparezcan en git. La forma más fácil de obtener esos commits será a través del git reflog. Pruebe git reflog <branch> para las posiciones anteriores de la rama que ha cambiado de base. Debería poder encontrar el SHA1 de la punta de la rama justo antes de su rebase interactivo. (Si la sucursal ya no existe, intente git reflog show para ver el reflog de HEAD. También debería estar allí, simplemente otra actividad para ordenar). Una vez que tenga el SHA1, está dorado: use git log -p o gitk para ver el se compromete y ve sus diferencias (Si desea hacer mucho con él, cree una rama allí, para que no tenga que pegar el SHA1 una y otra vez).

Esto seguirá siendo posible después de ejecutar git gc, siempre que no haya sido Pasó mucho tiempo desde que aplacaste esos compromisos. gc solo poda inalcanzable objetos colgantes de cierta edad. Los commits se consideran alcanzables si se puede acceder desde cualquier elemento de los reflogs, y los reflogs tardan 90 días en caducar, por lo que generalmente puede contar con esos commits originales que duran alrededor de tres meses.

+0

arregla el estilo por favor, difícil de leer :) – mecampbellsoup