¿Cómo me comprometo selectivamente usando git?

7 minutos de lectura

avatar de usuario
Quintín Par

Cuando estoy en la línea de comandos de git, es bastante difícil confirmar algunos archivos y guardar el resto para otra confirmación. ¿Cómo hago esto fácil?

  • Parece que lo entiendes, simplemente te resulta difícil organizar solo algunos archivos, lo que significa que estás buscando add -p como se sugiere a continuación. ¿O está realmente confundido acerca de lo que significa que los archivos no se rastreen, sean nuevos, modificados, preparados, etc.?

    – Cascabel

    11 de abril de 2011 a las 19:03

  • Q relacionado:stackoverflow.com/questions/3541647/git-add-vs-git-commit-a

    – Cherián

    12 de abril de 2011 a las 2:04

avatar de usuario
adam dimitruk

Es bastante simple. Tienes que añadir los cambios que quieras El índice primero:

git add file1 file2

después

git commit

si eliminó un archivo, el complemento lo hace. Agregar significa “agrega el cambio“a pesar de que es una eliminación.

Si desea agregar todos los cambios:

git add -A

los -a parámetro en commit dice que agregue todos los cambios de archivos rastreados y cometerlos. Asi que

git commit -a

no cometerá un archivo nuevo tu creaste Debe agregar esto explícitamente.

los -m parámetro le permite evitar abrir el editor para editar su mensaje de confirmación y usar lo que puso después de la -m opción:

git commit -m "Use this message and don't open the editor"

A veces esto no es una buena idea. si solo intentó una fusión y tuvo conflictos, git almacena en caché un mensaje muy agradable para usted una vez que resuelve los conflictos y se compromete. Entonces hay un git commit es mejor.

Para agregar archivos de forma selectiva, use el modificador de parche en git add:

git add -p

Esto ahora preguntarle acerca de los archivos. Esto es bastante poderoso ya que también puede especificar partes de archivos o, alternativamente, editar lo que desea agregar al índice. Una confirmación de git solo agregará esos.

Si desea alguna ayuda de interfaz gráfica de usuario que no sea tortoisegit (evitar la integración de shell de Windows), usar git gui.

Aquí hay un diagrama que explica el índice (o archivos preparados)):

ingrese la descripción de la imagen aquí

(de http://progit.org/book/ch2-2.html)

espero que esto ayude.

  • siempre he usado git add . (sin -A, que aparentemente es el valor predeterminado) para agregar todos los cambios.

    – adam_0

    11 de abril de 2011 a las 18:54

  • se perderá las eliminaciones o los archivos sin seguimiento. Git agregar. -A moverá todo al índice.

    – Adam Dimitruk

    11 de abril de 2011 a las 18:57

  • Para ese comando “agregar todo”, lo innecesario es el .. Ese es el valor predeterminado para git add -A o git add -u.

    – Cascabel

    11 de abril de 2011 a las 19:03

  • ¡Ahora aprendí algo! ¡Dulce! Va a ser un buen día 🙂 Ajustaré mi respuesta. ¡Gracias!

    – Adam Dimitruk

    11 de abril de 2011 a las 19:12

  • @adymitruk: “evitar la integración de Windows Shell” ¿por qué? (Sucede que no me gusta, pero tengo curiosidad por saber por qué enfatizaste este punto).

    – André Carón

    11 de abril de 2011 a las 20:18

avatar de usuario
marca longair

Cuando estoy en la línea de comando de git, es bastante difícil confirmar selectivamente algunos archivos y guardar el resto para otra confirmación. ¿Cómo hago esto fácil?

Irónicamente, esta es una de las cosas que git hace realmente fácil, pero tienes que aprender un concepto que otros sistemas de control de versiones simplemente no tienen. Esa idea es el “área de preparación” (técnicamente conocida como “índice”) que esencialmente realiza un seguimiento del contenido que estará en su próxima confirmación. Cuando tu dices git add somefile eso no quiere decir “comenzar a rastrear un archivo con este nombre”, significa “preparar el contenido del archivo, tal como está ahora”. Puede hacer esto solo para los archivos que elija en su árbol de trabajo; luego, un simple git commit simplemente convierte el contenido del área de preparación en su próxima confirmación.

Utilizando el -a parámetro a git commit básicamente dice “No me importa esta área de preparación/negocio de índice, simplemente organice todo lo que se está rastreando antes de comprometerse”. Entonces, hasta que esté satisfecho con la idea de organizar archivos particulares, simplemente haría un “compromiso de git” simple.

vale la pena correr git status con frecuencia cuando agrega archivos para acostumbrarse a esta idea: muestra archivos en hasta tres secciones, aunque no siempre estarán presentes todos si no hay nada que informar en esa sección:

Cambios a realizar:

Esto enumera los cambios que se han realizado, por lo que estarán en la próxima confirmación. Esto incluye archivos nuevos, archivos cuya eliminación se ha realizado por etapas y cualquier archivo con cambios por etapas.

Cambiado pero no actualizado:

Esto enumera los archivos que tienen cambios que aún no se han preparado.

Archivos sin seguimiento:

Estos son los archivos de los que git no sabe nada; por lo general, querrá ignorarlos agregando patrones a su .gitignore archivo, o agréguelos con git add.

Tenga en cuenta que los archivos pueden aparecer en las dos primeras secciones. Por ejemplo, puede cambiar su Makefileluego agréguelo al índice con git add Makefile. Luego, si continúa haciendo más cambios en Makefileguárdelo y luego ejecútelo git statusverá que aparece tanto en “Cambios por confirmar” como en “Cambiado pero no actualizado”, eso es porque (como se mencionó anteriormente) git add Makefile simplemente organiza el contenido exacto del archivo cuando ejecuta el comando. Si tu corres git add Makefile una vez más, la versión de ensayo se sobrescribirá con la versión en su árbol de trabajo, de modo que todos los cambios que haya realizado en él sean provisionales.

Vale la pena agregar otro par de consejos sobre el útil par de comandos git diff y git diff --cached – esencialmente, sus significados son:

  • git diff: “¿Qué cambios aún no he realizado?”
  • git diff --cached: “¿Qué cambios he realizado ya?”

Como probablemente pueda deducir de lo anterior, eso se debe a que git diff muestra la diferencia entre el área de preparación y el árbol de trabajo, mientras que git diff --cached muestra la diferencia entre su última confirmación y el área de ensayo.

  • “Como probablemente puedas deducir de lo anterior, eso es porque git diff muestra la diferencia entre el área de preparación y su árbol de trabajo, mientras que git diff muestra la diferencia entre tu última confirmación y el área de preparación”. ¿Escribir demasiado rápido? 😉 No hay necesidad de robarles a los pobres. Tu puntaje de reputación es mucho más alto 🙂

    – Adam Dimitruk

    11/04/2011 a las 19:31

  • Gracias por señalar los errores, de hecho me apresuré a escribir una respuesta antes de la cena 🙂 No pretendía robar reputación, solo pensé que mi respuesta era lo suficientemente diferente como para merecer otra. Tal vez no, en retrospectiva, pero sospecho que obtendrás toda la reputación aquí, de todos modos;)

    –Mark Longair

    11 de abril de 2011 a las 20:11

  • Solo estoy jalando tu pierna. ¡Es bueno ver a personas conocedoras del universo Git! 🙂

    – Adam Dimitruk

    11/04/2011 a las 20:55

avatar de usuario
adam_0

Puede ver la página del manual para git commit escribiendo git commit --help (además aquí).

Para agregar archivos para confirmar, use git add o, si los archivos ya están en el repositorio, el -a bandera le ayudará.

-m etiqueta un mensaje en su confirmación.

Si desea elegir archivos de forma selectiva, utilice git add y entonces git commit sin el -a etiqueta (que agregaría todos los cambios a los archivos que existen en el repositorio).

Yo personalmente uso el -s opción también, que añade signed off by <[email protected]> al final, si tiene eso en su configuración de git. Si no, solo usa git config --global user.email [email protected].

Es bastante simple enviar archivos en git. Para agregar archivos, tenemos los siguientes comandos

git add file1 file2

O si solo desea agregar todos los archivos a la vez, puede hacerlo

git add *

Entonces, se trata de comprometerse. Según los profesionales, debe agregar un mensaje con compromiso para que sea más fácil rastrear lo que ha comprometido. Para eso puedes usar

git commit -m "your message"

Si desea confirmar cualquier archivo que haya agregado con git add, y también confirme cualquier archivo que haya cambiado desde entonces. Puedes usar

git commit -a

si desea la lista de archivos que ha cambiado y los que aún necesita agregar o confirmar. Puedes usar

git status

Y para enviar sus cambios a la rama maestra de su repositorio remoto. el comando es

git push origin master

Espero que esto te ayude a comprender el concepto de git add, commit y push. Y resuelve tu problema también.

¿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