¿Por qué 'git commit' no guarda mis cambios?

251

Hice algo git commit -m "message"como esto:

> git commit -m "save arezzo files"
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

Pero luego, cuando lo hago git status, muestra los mismos archivos modificados:

> git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

¿Qué estoy haciendo mal?

arezzo
fuente
16
Use git commit -am "save arezzo files"para agregar automáticamente todos los cambios (wrt .gitignore). Es posible que desee agregar solo archivos / git add file.src
directorios

Respuestas:

400

Como dice el mensaje:

no se agregaron cambios al commit (use "git add" y / o "git commit -a")

Git tiene un "área de preparación" donde los archivos deben agregarse antes de ser confirmados, puede leer una explicación aquí .


Para su ejemplo específico, puede usar:

git commit -am "save arezzo files"

(tenga aen cuenta el extra en las banderas, también se puede escribir como git commit -a -m "message"- ambos hacen lo mismo)

Alternativamente, si desea ser más selectivo sobre lo que agrega a la confirmación, use el comando git add para agregar los archivos apropiados al área de preparación y el estado de git para obtener una vista previa de lo que se va a agregar (recuerde prestar atención a la redacción utilizada).

También puede encontrar documentación general y tutoriales sobre cómo usar git en la página de documentación de git que le dará más detalles sobre el concepto de almacenamiento provisional / adición de archivos.


Otra cosa que vale la pena conocer es la puesta en escena interactiva : esto le permite agregar partes de un archivo al área de puesta en escena, por lo que si ha realizado tres cambios de código distintos (para funcionalidades relacionadas pero diferentes), puede usar el modo interactivo para dividir el cambios y agregar / confirmar cada parte a su vez. Tener compromisos específicos más pequeños como este puede ser útil.

Peter Boughton
fuente
@PeterBoughton, ¿quiso decir "adición interactiva" en lugar de "adición interactiva"?
djb
3
No, me refería a la adición interactiva.
Peter Boughton
2
El repositorio local es una especie de área de preparación en sí misma antes de enviar el código al repositorio remoto. ¿Por qué agregar una "capa" más antes de realizar cambios, no es un poco complicado? Soy nuevo en git, pero imagino que el 99,99% de los desarrolladores siempre usan commit -am porque los cambios no salen de su entorno local de todos modos.
PawelRoman
2
Creo que me topé con esto porque estoy acostumbrado a que mi IDE se encargue de mí. No estoy seguro de por qué es un paso necesario tampoco, pero, de nuevo, hay mucho sobre git que no entiendo ... quiero decir git ...
trpt4him
49

No agregaste los cambios. Puede agregarlos específicamente a través de

git add filename1 filename2

o agregue todos los cambios (desde la ruta raíz del proyecto)

git add .

o use la taquigrafía -amientras se compromete:

git commit -a -m "message".
Femaref
fuente
Además, insto encarecidamente a los usuarios a utilizar la adición interactiva. Especialmente cuando intentas hacer pequeños commits agradables que son fácilmente reversibles.
jer
40

Deberías hacer:

git commit . -m "save arezzo files"
Baptiste Pernet
fuente
44
Esta parece ser la respuesta correcta a la pregunta del OP. No quería "agregar", quería cometer lo que fue modificado.
VectorVortec
8

Copié un pequeño subproyecto que tenía que estaba bajo el control de fuente de Git en otro proyecto y olvidé eliminar la carpeta .git. Cuando fui a confirmar recibí el mismo mensaje que el anterior y no pude borrarlo hasta que eliminé la .gitcarpeta.

Es un poco tonto, pero vale la pena verificar que no tenga una carpeta .git debajo de la carpeta que no se compromete.

Simon Hutchison
fuente
7

Podrías haber hecho un:

git add -u -n

Para verificar qué archivos modificó y se agregarán (ejecución en seco: opción -n), y luego

git add -u

Para agregar solo archivos modificados

Albert Vonpupp
fuente
4

Me parece que este problema aparece cuando he hecho un git add .en un subdirectorio debajo de donde .gitignorevive mi archivo (el directorio de inicio de mi repositorio, por así decirlo). Intente cambiar los directorios a su directorio superior y ejecutar git add .seguido de git commit -m "my commit message".

jam99
fuente
4

Quizás algo obvio, pero ...

Si tiene problemas con el índice, use git-gui . Obtiene una muy buena vista de cómo funciona realmente el índice (área de ensayo).

Otra fuente de información que me ayudó a entender el índice fue Scott Chacons "Getting Git", página 259 y posteriores.

Comencé a usar la línea de comando porque la mayoría de la documentación solo mostraba que ...

Creo que git-gui y gitk realmente me hacen trabajar más rápido, y me libré de los malos hábitos como "git pull", por ejemplo ... Ahora siempre busco primero ... Mira cuáles son realmente los nuevos cambios antes de fusionarme.

Martín
fuente
3

La razón por la que esto está sucediendo es porque tienes una carpeta que Git ya está rastreando dentro de otra carpeta que Git también rastrea. Por ejemplo, tenía un proyecto y le agregué una subcarpeta. Ambos estaban siendo rastreados por Git antes de poner uno dentro del otro. Para dejar de rastrear el que está dentro, encuéntralo y elimina el archivo Git con:

rm -rf .git

En mi caso, tenía una aplicación de WordPress y la carpeta que agregué dentro era un tema. Así que tuve que ir a la raíz del tema y eliminar el archivo Git, para que todo el proyecto fuera rastreado por el padre, la aplicación WordPress.

drjorgepolanco
fuente
1

si tiene más archivos en mi caso, tengo 7000 archivos de imagen cuando trato de agregarlos desde la carpeta de ruta del proyecto, no los ha agregado , pero cuando voy a la carpeta de imágenes, todo está bien. Ir a través de la carpeta de destino y ordenar como abows

git add .
git commit -am "image uploading"
git push origin master

git push origin master Enumeración de objetos: 6574, hecho. Contando objetos: 100% (6574/6574), hecho. Compresión Delta utilizando hasta 4 hilos Compresión de objetos: 100% (6347/6347), hecho. Escribir objetos: 28% (1850/6569), 142.17 MiB | 414.00 KiB / s


fuente
0

Tuve un problema en el que estaba haciendo commit --amendincluso después de emitir un git add .y todavía no funcionaba. Resulta que hice algunas .vimrcpersonalizaciones y mi editor no funcionaba correctamente. La solución de estos errores para que vimdevuelva el código correcto resolvió el problema.

Brennan Cheung
fuente
0

Tuve un problema muy similar con el mismo mensaje de error. "Cambios no organizados para la confirmación", pero cuando hago un diff muestra diferencias. Finalmente descubrí que hace un tiempo había cambiado un caso de directorios. ex. "PostgeSQL" a "postgresql". Como recuerdo ahora, a veces git dejará uno o dos archivos en el directorio de casos anterior. Luego, confirmará una nueva versión para el nuevo caso.

Por lo tanto, git no sabe en cuál confiar. Entonces, para resolverlo, tuve que ir al sitio web del github. Entonces podrás ver ambos casos. Y debe eliminar todos los archivos en el directorio en mayúsculas incorrecto. Asegúrese de tener la versión correcta guardada o en el directorio en mayúsculas correcto.

Una vez que haya eliminado todos los archivos en el directorio del caso anterior, todo ese directorio desaparecerá. Entonces haz un compromiso.

En este punto, deberías poder hacer un Pull en tu computadora local y no ver más los conflictos. Así poder comprometerse de nuevo. :)

brianwaganer
fuente
0

si tiene una subcarpeta, que se clonó desde otro repositorio git, primero debe eliminar el archivo $ .git $ del repositorio secundario: rm -rf .git después puede cambiar a la carpeta principal y usar git add -A.

Sam Toorchi
fuente