2011-10-09 15 views
225

hice un git commit -m "message" así:¿Por qué 'git commit' no guarda mis cambios?

> 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 después, cuando lo haga git status que 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?

+16

Use 'git commit -am" save arezzo files "' para agregar automáticamente todos los cambios (w.r.t. .gitignore). Es posible que desee agregar solo archivos/directorios específicos: 'git add file.src' – mbx

+0

Posible duplicado: http://stackoverflow.com/questions/2419249/git-commit-all-the-files-using-single-cmd http : //stackoverflow.com/questions/4571106/git-commit-all-files – mbx

Respuesta

362

Como dice el mensaje:

no hay cambios añaden a comprometerse (use "git add" y/o "git commit -a")

Git tiene un "área de preparación" donde los archivos deben agregarse antes de comprometerse, puede read an explanation of it here.


Para su ejemplo específico, puede utilizar:

git commit -am "save arezzo files" 

(nota de la a 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 ensayo y git status para obtener una vista previa de lo que está por 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 el git documentation page que dará más detalles sobre el concepto de puesta en escena/adición de archivos.


Otra cosa vale la pena conocer es interactive staging - esto le permite añadir partes de un archivo al área de ensayo, por lo que si usted ha hecho tres cambios de código distintos (para la funcionalidad relacionada pero diferente) , puede usar el modo interactivo para dividir los cambios y agregar/comprometer cada parte a su vez. Tener compromisos específicos más pequeños como este puede ser útil.

+0

@PeterBoughton ¿quisiste decir "agregar interactivamente" en lugar de "agregar interactuando"? – djb

+3

Nah, quise decir agregar de forma interactiva. –

+0

(gracias, lástima que le tomó 10 meses a cualquiera) –

37

que debe hacer:

git commit . -m "save arezzo files" 
+2

+1 ¡Eres un salvavidas! – Miguel

+3

Esta parece ser la respuesta correcta a la pregunta del OP. Él no quería "agregar", quería comprometer lo que se había modificado. – VectorVortec

41

No ha agregado los cambios. Ya sea específicamente añadirlos a través

git add filename1 filename2 

o añadir todos los cambios (de ruta raíz del proyecto)

git add . 

o utilizar la abreviatura -a mientras commiting:

git commit -a -m "message". 
+0

Además, recomiendo encarecidamente a los usuarios que utilicen la adición interactiva. Especialmente cuando estás tratando de hacer pequeños commits que son fácilmente reversibles. – jer

4

Tal vez una cosa obvia , pero ...

Si tiene algún problema con el índice, use git-gui. Obtiene una muy buena vista de cómo funciona realmente el índice (área de preparación).

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

Empecé usando la línea de comandos porque la mayoría de documentación sólo mostró que ...

creo git-gui y gitk realidad me hacen trabajar más rápido, y se deshizo de los malos hábitos como "git pull" para ejemplo ... Ahora siempre busco primero ... Vea cuáles son realmente los nuevos cambios antes de fusionarme.

7

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

Es un poco tonto, pero vale la pena comprobar que no tiene una carpeta .git debajo de la carpeta que no confirma.

6

que podría haber hecho una:

git add -u -n 

para comprobar qué archivos que se modifican y se van a añadir (en seco: opción -n), y luego

git add -u 

Para añadir simplemente archivos modificados

4

me parece que este problema aparece cuando he hecho un git add . en un subdirectorio continuación donde mi .gitignore file lives (el directorio de inicio de mi repositorio, por así decirlo). Intente cambiar directorios a su directorio más arriba y ejecutando git add . seguido por git commit -m "my commit message".

0

Tuve un problema donde estaba haciendo commit --amend incluso después de emitir un git add . y todavía no estaba funcionando. Resulta que realicé algunas personalizaciones de .vimrc y mi editor no funcionaba correctamente. La solución de estos errores para que vim devuelva el código correcto resolvió el problema.

3

La razón por la que esto está sucediendo es porque usted tiene una carpeta que ya está siendo rastreada por Git dentro de otra carpeta que también es rastreada por Git. Por ejemplo, tuve un proyecto y agregué una subcarpeta a él. Ambos estaban siendo rastreados por Git antes de poner uno dentro del otro. Con el fin de detener el seguimiento de la de adentro, encontrar y eliminar el archivo de Git con:

rm -rf .git 

En mi caso tuve una aplicación de WordPress y la carpeta añadí interior era un tema. Así que tuve que ir a la raíz del tema, y ​​eliminar el archivo Git, para que el padre, la aplicación de WordPress, pudiera rastrear todo el proyecto.

+1

Este es el que me salvó, ¡gracias! –

Cuestiones relacionadas