tag remove practices crear best all git commit sha cherry-pick

git - remove - Elija un compromiso y conserve el código SHA original.



git rename tag (3)

De acuerdo con sus comentarios a otras respuestas, creo que simplemente desea restablecer a algún compromiso remoto. Puedes usar git reset --hard <SHA> para hacer esto. Tenga en cuenta que esto descartará todos sus cambios (no confirmados) en el directorio de trabajo y no se podrá acceder a todas las confirmaciones que realizó en esta rama.

Si esto no es lo que quiere (o no está seguro), describa más claramente lo que hizo y lo que quiere hacer o lo que está tratando de lograr.

Me gustaría seleccionar una confirmación en un control remoto obtenido mientras mantengo su código de confirmación SHA original (mi rama actual se basa en este control remoto que reinicié en un estado anterior).


El hash de confirmación SHA está hecho desde el estado del repositorio, usando todo el historial hasta el punto de la confirmación (ramas no incluidas). Esto significa que no se puede mantener el hash original en cherry-picking a menos que toda la historia sea la misma, y ​​en ese caso el "cherry picking" no tendría sentido.


Un hash git SHA se calcula a partir de diferentes datos:

  1. El árbol al que se refiere; Básicamente, el contenido actual del repositorio en la rama en la que aparece la confirmación.
  2. El SHA de los padres se compromete (s) .
  3. El mensaje de confirmación .
  4. La información del autor : nombre, correo electrónico y marca de tiempo.
  5. La información del remitente : nombre, correo electrónico y marca de tiempo.

Incluso si edita una confirmación seleccionada para que el árbol, el mensaje de confirmación, el autor y la información del confirmador sean exactamente los mismos, el SHA del compromiso principal (o confirmaciones, si se trata de compromisos de fusión) siempre será diferente. Por lo tanto, no podrá generar el mismo hash SHA después de una selección selectiva (a menos que encuentre una colisión SHA;)).