Necesito abrir y eliminar la fijación "intermedia" en mi rama principal. ¿Cómo hago esto?

Por ejemplo, en la siguiente rama principal necesito eliminar solo commit af5c7bf16e6f04321f966b4231371b21475bc4da, que es la segunda debido a un reinicio anterior:

 commit 60b413512e616997c8b929012cf9ca56bf5c9113 Author: Luca G. Soave <luca.soave@gmail.com> Date: Tue Apr 12 23:50:15 2011 +0200 add generic config/initializers/omniauth.example.rb commit af5c7bf16e6f04321f966b4231371b21475bc4da Author: Luca G. Soave <luca.soave@gmail.com> Date: Fri Apr 22 00:15:50 2011 +0200 show github user info if logged commit e6523efada4d75084e81971c4dc2aec621d45530 Author: Luca G. Soave <luca.soave@gmail.com> Date: Fri Apr 22 17:20:48 2011 +0200 add multiple .container at blueprint layout commit 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22 Author: Luca G. Soave <luca.soave@gmail.com> Date: Thu Apr 21 19:55:57 2011 +0200 add %h1 Fantastic Logo + .right for 'Sign in with Github' 

Necesito mantenerme

  • La primera fijación es 60b413512e616997c8b929012cf9ca56bf5c9113,
  • El tercer retenedor e6523efada4d75084e81971c4dc2aec621d45530 y
  • Último arreglo 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22

"descartar" solo la segunda fijación af5c7bf16e6f04321f966b4231371b21475bc4da

¿Cómo puedo hacer esto? gracias de antemano luke

48
22 апр. conjunto de Luca G. Soave 22 de abril 2011-04-22 18:48 '11 a las 18:48 2011-04-22 18:48
@ 3 respuestas

Rebase o revertir son parámetros. Rebase realmente eliminará la solución de la historia para que parezca que la segunda solución nunca existió. Esto será un problema si mueve la rama principal a otros repositorios. Si intenta hacer clic después de reinstalar en este caso, git le dará un error con un error que no está relacionado con el avance rápido.

Revertir es la solución correcta cuando una sucursal se ha transferido a otros repositorios. git revert af5c7bf16 creará un nuevo fijador que simplemente cambiará los cambios realizados por af5c7bf16. Por lo tanto, la historia no se reescribe, mantienes un registro claro del error y otra reposición tomará impulso.

Esta es una buena forma de borrar: git rebase -i <commit>^ Esto te llevará a cometer justo antes de la que quieres eliminar. Un editor interactivo le mostrará una lista de todas las confirmaciones hasta este punto. Puedes elegir, squash, etc. En este caso, elimine la línea de confirmación que desea eliminar y guarde el archivo. Rebase completará su trabajo.

63
22 апр. La respuesta la da JCotton el 22 de abril. 2011-04-22 19:23 '11 a las 19:23 2011-04-22 19:23

Si rebase es una opción, puede reinstalar y simplemente rechazarla:

 $ git rebase -i 414ceffc^ 
border=0

Si rebase no es una opción, simplemente puede devolverlo:

 $ git revert af5c7bf16 
19
22 апр. La respuesta se da mipadi 22 abr. 2011-04-22 19:11 '11 a las 19:11 2011-04-22 19:11

A pesar de todas las respuestas de crédito originales recibidas aquí, no las encontré satisfactoriamente respondiendo la pregunta. Si te encuentras en una situación en la que necesitas eliminar una fijación o colección de fijaciones de la mitad de la historia, esto es lo que sugiero:

  • Cree una nueva rama desde la cabeza que contenga todas las confirmaciones y cambie a ella.
  • Vuelva a colocar la nueva rama en el punto donde desea iniciar la nueva base.
  • Luego (aquí está el punto clave) seleccione las siguientes confirmaciones que realmente desea aplicar después de esto desde la rama fuente a la nueva, y omita las confirmaciones que ya no necesita (es decir, las que elimina).
  • Si lo desea, cambie el nombre de la rama original a lo que indica su código anterior y luego cambie el nombre de la nueva rama desde la cual se emitió el original.
  • Finalmente, haga clic en sus cambios en el repositorio remoto (si se usa). Puede que tengas que usar "push push". Si sus colaboradores tienen problemas con la revisión, puede ser más fácil simplemente clonar el repositorio nuevamente desde una fuente remota. De todos modos, lo más probable es que quieras hablar con ellos si todavía vomitas en medio de tu historia.

Información para recoger cerezas: ¿Qué hace una compilación de cerezas con git?

Aquí hay algunos de ellos que lo hacen con Tortoise git (como acabo de hacer). ¡Definitivamente es más fácil usar la utilidad gui para este tipo de operaciones! Selector de cerezas utilizando TortoiseGit

5
04 авг. La respuesta está dada por BuvinJ 04 ago. 2017-08-04 02:16 '17 a las 2:16 am 2017-08-04 02:16

Otras preguntas sobre tags o Haz una pregunta