Tengo curiosidad acerca de cómo eliminar el primer commit en git.
¿Cuál es la revisión antes de cometer algo? ¿Esta revisión tiene un nombre o etiqueta?
git
repository
commit
git-commit
Jian Weihang
fuente
fuente
git rebase -i --root
. Consulte la siguiente respuesta SO para obtener más detalles: stackoverflow.com/questions/2246208/…git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
Respuestas:
Para mí, la forma más segura es usar el
update-ref
comando:Eliminará la referencia nombrada
HEAD
, por lo que restablecerá (suavemente, no perderá su trabajo) todas las confirmaciones de su rama actual .Si lo que quieres es fusionar el primer commit con el segundo, puedes usar el
rebase
comando:Una última forma podría ser crear una rama huérfana, una rama con el mismo contenido pero sin ningún historial de confirmación, y confirmar su nuevo contenido en ella:
fuente
No hay nada antes de la primera confirmación, ya que cada confirmación se refiere a una confirmación principal. Esto hace que la primera confirmación sea especial (una confirmación huérfana), por lo que no hay forma de referirse a un "estado" anterior.
Entonces, si desea corregir la confirmación, puede simplemente
git commit --amend
: esto modificará la confirmación sin crear otra.Si solo desea comenzar de nuevo, elimine el
.git
repositorio y haga otro congit init
fuente
--amend
tampoco actualizará al autor correctamente si inicialmente estaba mal configurado. Eso es lo que necesitaba, así que utilicé la respuesta aceptada y luego hice una nueva confirmación.fuente
Es posible que solo desee editar su primera confirmación (ya que siempre hay una primera confirmación en un repositorio de git). Considere usar en
git commit --amend --reset-author
lugar de lo habitualgit commit --amend
.fuente
Estaba buscando una manera de deshacer todos los git commits de un repositorio, como si nunca hubieran sucedido.
Rebasar funcionará hasta cierto punto. Sin embargo, el primero (cronológicamente, el git commit más antiguo) siempre será problemático, ya que no tiene un padre, por lo que se producirá un error.
Ninguna de estas respuestas me resolvió del todo. Pero después de muchas búsquedas y pruebas y errores, ¡encontré que esto funcionaba!
Espero que esto te ayude. Que tengas un gran día.
fuente
Otra forma de hacerlo es:
git checkout dev
git branch -D master
git checkout --orphan master
Por supuesto, todo esto dependerá de su caso de uso, pero si tiene más de una rama, eliminar el
.git
directorio no tiene sentido.fuente
Si desea mantener otras ramas, pero, por ejemplo, hacer que la
master
rama comience de nuevo sin un historial común para otras ramas, una forma segura de lograr esto es crear un nuevo repositorio e insertar el contenido en el anterior:Esto crea una
newmaster
rama en el antiguo repositorio, con un historial que no es común con ninguna de las otras ramas. Por supuesto, también puede sobrescribir elmaster
, congit push -f
.Si desea destruir todas las ramas y todo el contenido existente, simplemente ejecute
fuente
git rebase --root
que probablemente OP quería, pero teniendo en cuenta que esta respuesta tiene dos votos a favor, me abstendré de eliminarla en caso de que alguien todavía la encuentre relevante.Si lo ha confirmado pero no lo ha presionado, simplemente elimine el directorio .git y
git init
nuevamente ...fuente
La respuesta a la pregunta depende de si:
Desea eliminar el primer Y SOLO confirmar en una rama (mientras deja otras ramas como estaban), o si
Desea eliminar la primera confirmación en alguna rama, mientras 'deja en su lugar' las confirmaciones posteriores (y las otras ramas).
El segundo de estos es relativamente más simple. Esencialmente, debe volver a basar la raíz: la mayoría de las respuestas aquí son sobre formas de hacerlo.
Hacer lo segundo (eliminar el primer y único commit de una rama mientras se dejan otras ramas solas) es más difícil. O, al menos, especialmente más difícil si quieres que suceda y que el cambio se refleje en GitHub o Bitbucket. No hay (por lo que puedo decir) ninguna manera en Git para empujar o forzar empujar una rama sin compromisos. Y tampoco hay (de nuevo, por lo que puedo ver) ninguna forma de crear una nueva rama vacía sin compromisos en GitHub o Bitbucket. Por lo tanto, esencialmente debe crear un nuevo repositorio para crear una rama completamente vacía, y luego volver a agregar las ramas que desee (incluidas las confirmaciones que desee), según la respuesta de @ user1338062.
Así que espero que esta respuesta aclare lo que podría no haber sido obvio: que hay dos enfoques diferentes que deben tomarse, para dos escenarios diferentes (más o menos razonables) que son las dos cosas que es posible que desee hacer, en orden dominar completamente lo que pide el OP.
fuente