¿Eliminar un archivo en una rama en git implica eliminarlo también de la rama maestra?

¿Eliminar un archivo en una rama en git implica eliminarlo también de la rama maestra?

Acabo de enfrentar una situación que me parece ilógica con Git. Tengo un repositorio con muchas confirmaciones, por lo que en esta etapa solo tiene una rama (maestro).

rama maestra

Supongamos que esta rama tiene un archivo llamadoMiArchivo.txt. Ahora necesito crear una rama diferente porque quiero hacer algunos cambios en algunos archivos y no quiero hacerlo directamente en la rama maestra, así que ejecuto:

git checkout iss53

Ahora el esquema se ve así:

Nueva sucursal

Bien, me he cambiado de sucursal.iss53, corro ls -ly elMiArchivo.txt. Uno de los cambios incluye la eliminación delMiArchivo.txtarchivo, entonces:

git rm MyFile.txt

Bien, correr ls -lde nuevo demuestra que no hay nada.MiArchivo.txtya no. Así que vuelvo almaestrorama:

git checkout master

Pero elMiArchivo.txtEl archivo también ha desaparecido. Mi lógica dice que si eliminé el archivo en una rama, debería aplicarsesoloa esa rama, entonces ¿por qué se elimina el archivo de lamaestrosucursal también? Tenga en cuenta que todavía no he realizado ninguna confirmación, solo me he ramificado.

Nota: Ambas imágenes están tomadas degit-scm.

Respuesta1

La respuesta está en tu pregunta:

Tenga en cuenta que todavía no he realizado ninguna confirmación, solo me he ramificado.

Si no se compromete, los cambios siempre se guardan en su directorio de trabajo. Cambiar de rama no afecta su directorio de trabajo, y el directorio de trabajo tampoco afecta su última confirmación. Está viendo que el archivo se elimina, pero la realidad es que se elimina únicamente de su directorio de trabajo. Si desea borrar los cambios y volver a la última confirmación, utilice este comando:

git reset --hard HEAD

Entonces el archivo se restaurará nuevamente.

Quizás no sea lógico para ti, pero este comportamiento puede resultar útil. Imagina que tienes 2 ramas: mastery development, y siempre debes trabajar en ellas developmentantes de mover los cambios a master. Digamos que olvidaste cambiar a developmentantes de comenzar a trabajar y luego, antes de comprometerte, te diste cuenta de que estás en master. La solución es simple, simplemente cambie y developmentluego confirme.

Respuesta2

Cada vez que eliminé un archivo de una de mis ramas (a la que llamé inicio de sesión), no lo eliminé de la rama maestra.

  1. Cambié a la rama de inicio de sesióngit checkout login
  2. Se eliminó el archivo test.html.git rm --cached test.html
  3. Se agregó todo al área de preparación.git add .
  4. Comprometió los cambios congit commit -m 'removed test.html file'
  5. Envió el repositorio local al repositorio remoto de Github congit push

información relacionada