2011-05-02 8 views
35

Estoy usando Git 1.7.4.1 en Mac 10.6.6. Desde la línea de comandos, ¿cómo confirmo los cambios en un solo directorio? He añadido el directorio haciendo:Confirmar cambios solo en un directorio en Git

git add my-dir 

pero haciendo

git commit -a 

resultado será una lista de todos los cambios en mi repo, y yo sólo quiero cometer y empujar los cambios de my-dir.

Respuesta

28

Omita la opción -a. Luego, git comprometerá solo los archivos que haya montado con git add.

También puede intentar confirmar el directorio sin organizar con git commit my-dir.

+0

Si hago lo segundo que dices (intenta comprometer sin montar), ¿qué cambios se confirmarán? –

+0

En ese caso, @Stefan, "la confirmación ignorará los cambios realizados en el índice, y en su lugar registrará el contenido actual de los archivos enumerados (que Git ya debe conocer)", dice [la documentación] (https: // git-scm.com/docs/git-commit). –

11

Hmm, impar Lo siguiente debería funcionar Suponiendo que no tienes nada organizado.

git add my-dir 
git commit -m "Commiting first revision of my-dir folder. Very exciting feature!" 
git push origin master 
+0

Realmente no entiendo tu pregunta, pero probablemente sea por mi culpa :) Reescribí mi respuesta. Espero que sea para más satisfacción. – ralphtheninja

+0

Bueno, eso es un poco más claro. Todavía no entiendo por qué estás'_yelling_ 'que debe. De hecho, eso solo será correcto una vez que limites el alcance del 'commit 'también (ya que no puedes saber qué más está ya en escena) – sehe

+0

Ok, te sigo. ¿No era mi intención gritar, solo para enfatizar la palabra? Reemplazado con debería. Y sí, por supuesto, asumí que no se agregó nada más al índice. – ralphtheninja

3

Justo etapa, la carpeta mediante git add según sus especificaciones, y lo hacen de una confirmación sin la opción -a: git commit -m "Committing stuff". La opción -a significa confirmar todos los archivos que se han modificado, incluso si no están organizados.

1

Confirmará cualquier cambio en el "área de preparación"; Puedes ver estos con git status.

la bandera -a en git commit -a, de acuerdo con la página del manual, le dice a Git que más o menos "etapa de todos los archivos que han sido modificados o eliminados, pero no los archivos nuevos que no han dicho git sobre" - esto no es lo que quiere

la lección es ser consciente de lo que las opciones de línea de comandos qué

para solucionar este problema, lo primero que quiero hacer es, de acuerdo con How to undo 'git add' before commit?, a unstage todos los archivos que ha añadido accidentalmente con la opción commit -a. De acuerdo con esa respuesta, debe ejecutar el comando git rm -r --cached ., y ahora sus cambios aún deberían estar allí, pero no se ha organizado nada.

Ahora puede hacer git add my-dir como lo hizo antes. A continuación, puede hacer git commit (sin el -a)

43

¿Por qué nadie menciona simplemente puede

git commit -m 'message' -- my-dir 

Me parece el PO no está acostumbrado a/no le gusta utilizar el área de ensayo directamente.Este enfoque también es mucho más seguro para recomendar sin más contexto, porque lo más probable es que un defaault cometer (de todo lo que está en escena) se

  • comprometerse más que mi-dir si ya había sido puesta en escena
  • se producir resultados confusos cuando la OP no se utiliza para la gestión de la zona de concentración de forma explícita (porque el árbol de trabajo puede haber llegado fuera de sincronía con el índice)
+1

Creo que * lo * mencioné, al menos la parte pertinente a la pregunta. (Si el mensaje de confirmación se incluye en la línea de comandos o se solicita para más adelante es un problema separado del tema en cuestión, que era cómo asignar un directorio específico sin comprometer todo lo demás.) –

+1

Vaya. Lo extrañé (¿la charla '-a' me sacó de la pista?). Es posible que inconscientemente busque el token ** '--' **. (_oh y el mensaje de confirmación es solo un hábito:) _) – sehe

3

hacerlo todo en un solo comando:

git commit -- my-dir 
+0

La misma [respuesta de sehe] (/ a/5862894/938111) es dos días más antigua y proporciona algunas explicaciones. La misma [respuesta del usuario6120452] (http://stackoverflow.com/a/36247058/938111) proporciona detalles útiles. – olibre

3

básico

git add -- ./myfolder 
git commit -m'my comment' -- ./myfolder 

Con más archivos y directorios

git add -- ./myfolder1 ./myfolder2./some/random/file.txt 
git commit -m'cool' -- ./myfolder1 ./myfolder2 ./some/random/file.txt 

lo que estaba buscando para git repo desnuda

git --git-dir=path/to/my/repo --work-tree=path/to/my/working/tree add -- ./myfolder 
git --git-dir=path/to/my/repo --work-tree=path/to/my/working/tree commit -m'my comment' -- ./myfolder 

Recuerde citar caminos con espacios o personajes locos

Cuestiones relacionadas