Git checkout por order de compromiso

Cuando uso Git checkout master ~ X, obtendré la Xª confirmación fusionada, lo que realmente quiero es la X.ª confirmación real (no solo las confirmaciones fusionadas).

¿Cómo puedo hacer eso?

Gracias.

Pruebe algo como lo siguiente:

git checkout $(git log --no-merges --skip=2 -1 --format='%H') 

Cambiar --skip=2 a la cantidad de commits que no se fusionan y que desea omitir. Si desea la primera confirmación sin fusión, use --skip=0 ; la segunda confirmación sin fusión, use --skip=1 ; el tercero, use --skip=2 ; etc.


Puede configurar un alias (usando esta respuesta como guía):

 git config alias.co-non-merge '!git_co_non_merge() { git checkout `git log --no-merges --skip=$(($1 - 1)) -1 --format="%H"` ; } ; git_co_non_merge' 

Agregue --global para convertirlo en un cambio de configuration global. Entonces podrías usar git co-non-merge X

Merge commits se puede replace con rebase. Mira este artículo . Sin embargo, solo tiene efecto en twigs futuras.

Puede get una list de confirmaciones que no son compromisos de fusión utilizando

 git log --no-merges 

En esa list, simplemente tome el resultado X-th para hacer el checkout .

Para su caso de uso, la bandera --online también se puede utilizar ya que la breve visualización debería ser suficiente.