Si preparó un archivo en un proyecto de Git en su Mac pero desea excluirlo de la próxima confirmación, ejecute git restore --staged para ese archivo desde Terminal. Esto actualiza el área de preparación de Git mientras mantiene el archivo en su carpeta de trabajo, por lo que sus modificaciones seguirán disponibles para revisarlas o prepararlas más adelante. Verifique la ruta del archivo y confirme el resultado con git status antes de confirmar.

Qué cambia al "despreparar" (unstage)

Git conserva la propuesta de la próxima confirmación en su índice, también conocido como área de preparación (staging area). Normalmente, una confirmación incluye los cambios preparados; las ediciones que no ha preparado permanecen en su árbol de trabajo. Por lo tanto, quitar un archivo del índice cambia lo que está preparado para la confirmación, sin pedirle a Git que reescriba la copia de trabajo. Git documenta que git restore --staged restaura el índice desde HEAD de forma predeterminada. Documentación de restore de Git

Esto resulta útil cuando preparó el archivo equivocado o decidió que un archivo no debe incluirse en una confirmación. El comando se aplica a un archivo específico cuando le proporciona una sola ruta. No agregue --worktree: la documentación de Git indica que usar tanto --staged como --worktree restaura ambas ubicaciones, lo cual no es el objetivo si lo que busca es conservar sus modificaciones.

Quitar un archivo del área de preparación desde Terminal

Abra Terminal en su Mac y cámbiese a la carpeta del repositorio. El shell predeterminado de Terminal es zsh, aunque una Mac administrada podría usar un shell diferente. Guía de Terminal de Apple

Ejecute primero git status. Busque el archivo preparado en "Changes to be committed" y anote su ruta relativa a la raíz del repositorio. Si ve un repositorio diferente o la ruta no es clara, deténgase y compruebe su ubicación antes de modificar nada.

Por ejemplo, para quitar src/Feature.swift del área de preparación, ejecute:

git restore --staged -- src/Feature.swift

El parámetro -- separa las opciones de la ruta. Resulta útil para nombres que de otro modo podrían interpretarse como opciones. Entrecomille las rutas que contengan espacios para que zsh pase la ruta como un único argumento:

git restore --staged -- "Documentation/Setup Notes.md"

Utilice la ruta tal y como la reporta Git, respetando mayúsculas, minúsculas y nombres de directorio. Si ya se encuentra dentro de un subdirectorio del repositorio, la gestión de rutas de Git puede ser menos intuitiva; ejecutar el comando desde la raíz del repositorio y usar la ruta completa relativa a este facilita la verificación del objetivo.

Confirmar que las modificaciones siguen ahí

Ejecute nuevamente git status. En el caso de un archivo rastreado y modificado, el cambio preparado debería desaparecer de "Changes to be committed" y aparecer en "Changes not staged for commit". Eso significa que la copia de trabajo todavía difiere de HEAD, pero el índice ya no contiene ese cambio propuesto. Git describe el estado como la muestra de diferencias entre HEAD y el índice, y entre el índice y el árbol de trabajo. Documentación de add de Git

Puede inspeccionar las modificaciones que quedaron fuera del área de preparación con:

git diff -- "src/Feature.swift"

Ese diff compara el archivo de trabajo con el índice. Dado que el índice ahora coincide con HEAD para ese archivo rastreado, muestra las modificaciones conservadas que retiró del área de preparación. Para preparar el archivo para una confirmación posterior, agréguelo de nuevo con git add -- "src/Feature.swift".

Qué esperar en el caso de archivos nuevos y eliminaciones

Si el archivo es nuevo y nunca se ha confirmado, no tiene ninguna versión en HEAD. Después de que git restore --staged -- path/to/new-file lo elimine del índice, el archivo debería permanecer en el disco como un archivo sin seguimiento (untracked). Compruebe que aparezca bajo "Untracked files" en git status; no lo elimine si desea conservarlo.

Si preparó la eliminación de un archivo rastreado, restaurar el índice desde HEAD vuelve a colocar la versión rastreada en el índice, mientras que la copia de trabajo permanece eliminada. El estado debería mostrar una eliminación no preparada (unstaged). Esta distinción es importante: quitar del área de preparación no necesariamente hace que el árbol de trabajo se vea sin cambios; preserva el estado que se encuentra actualmente en el disco.

Si preparó solo una parte del archivo

El mismo comando quita del área de preparación el contenido preparado del archivo en su totalidad. Si preparó intencionadamente algunos fragmentos (hunks) y solo desea mantener preparados los seleccionados, no ejecute el comando para el archivo completo. El comando restore de Git admite el modo de parche interactivo, pero seleccionar la dirección y los fragmentos adecuados requiere precaución. Revise el comportamiento documentado de git restore --patch en Git antes de utilizarlo; Git también documenta git add --patch para elegir interactivamente qué fragmentos preparar. Documentación de restore de Git

Evite git restore --worktree o git restore --staged --worktree para esta tarea. Esas opciones afectan el árbol de trabajo y pueden descartar precisamente las modificaciones que intenta conservar. Si el resultado en git status difiere de lo que esperaba, deténgase e inspeccione la ruta y el diff antes de ejecutar otro comando de restauración.

Fuentes