¿Por qué quedan carpetas en mi directorio de trabajo local de git después de confirmar y pagar?

3 minutos de lectura

avatar de usuario
Matt W.

Creé una carpeta que contiene archivos en mi estructura git de trabajo local. Creé una nueva rama con git checkout -b y usé git add. y git commit -m “…” para agregar esos archivos a mi sucursal local. Pero, cuando hago git checkout master, la carpeta que creé y comprometí todavía está allí. ¿Por qué? Pensé que git commit pondría la carpeta y su contenido en mi rama local, cambiándolo cuando pague master.

  • Como nota de terminología: git checkout -b <name> crea una nueva “rama”, no un nuevo “repo”. El repositorio se refiere a todo el directorio de git.

    – Zachary Espíritu

    26 de agosto de 2017 a las 22:45

  • Git normalmente elimina las carpetas vacías… ¿hay quizás archivos ocultos?

    – o11c

    26 de agosto de 2017 a las 23:05

  • No, no hay archivos ocultos.

    – Matt W.

    27 de agosto de 2017 a las 6:43

Si agrega archivos previamente no rastreados a una nueva rama y luego retira otra rama que actualmente no rastrea esos archivos, no los eliminará de su copia de trabajo.

Aquí hay un ejemplo: digamos que actualmente estoy en una rama limpia llamada old_branchy reviso una nueva sucursal llamada new_branch:

git checkout -b new_branch

Luego, creo un nuevo archivo llamado test.txt en esta rama y agregarlo al repositorio:

touch test.txt  # creates a new file named test.txt
git add test.txt
git commit -m "Added test.txt"

los test.txt el archivo es rastreado actualmente por el new_branch rama. Sin embargo, cuando vuelvo a cambiar de rama a old_branch:

git checkout old_branch

Ya que test.txt no es rastreado por old_branch, lo deja en el directorio de trabajo y no lo sobrescribe. Este es el comportamiento esperado. Si lo haces git status En este punto, notará que el test.txt el archivo actualmente no está rastreado.


Para completar, si necesita limpiar su copia de trabajo de todos los archivos sin seguimiento, primero puede hacer lo siguiente:

git clean -n

Esto mostrará una lista de todos los archivos sin seguimiento que se eliminarán. Si está satisfecho con la lista, puede eliminar esos archivos con:

git clean -f -d

Este es un comando destructivo., especialmente porque elimina archivos que no son rastreados por la rama actual. (Sin embargo, no los eliminará de las ramas que rastrean esos archivos).

  • Entonces, ¿qué es diferente entre eso y cuando hago git push después de agregar y confirmar? ¿Por qué se eliminan o limpian los archivos rastreados si no existen en la rama old_branch?

    – Matt W.

    26 de agosto de 2017 a las 23:33

  • git push solo empuja su rama actual hacia arriba, también conocida como su rama remota. No es del todo relevante para el problema que describe de que los archivos sin seguimiento no se eliminan cuando cambia de rama.

    – Zachary Espíritu

    27 de agosto de 2017 a las 2:18

  • Y a su otra pregunta: si un archivo es rastreado tanto por el new_branch y el old_branch, será sobrescrito por cada rama cuando los revise. Por otro lado, si un archivo es rastreado por una rama y no por la otra, cambiar de rama no cambiará el archivo porque la otra rama no lo está buscando. Como tal, el git clean El comando se puede usar para eliminar archivos de su máquina local que no están siendo rastreados por la rama actual.

    – Zachary Espíritu

    27 de agosto de 2017 a las 2:19

  • Recibo todo eso. Lo que pregunto es por qué un archivo rastreado por la rama actual no desaparece cuando pago una rama que no lo tiene. Esto en un escenario en el que no he presionado a control remoto, pero he agregado y confirmado antes del pago.

    – Matt W.

    27 de agosto de 2017 a las 6:41

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad