Git commit abre un archivo de texto en blanco, ¿para qué?

93

En todos los tutoriales de Git que he leído, dicen que puedes hacer:

git init
git add .
git commit

Cuando hago eso, se abre un archivo de texto grande. Ninguno de los tutoriales parece abordar esto, así que no sé qué hacer con el archivo o qué poner en él, si es que hay algo.

aleatorio
fuente

Respuestas:

124

Debes poner el mensaje de confirmación en este archivo de texto, luego guardar y salir.

Puedes cambiar el editor de texto predeterminado que usa git con este comando:

git config --global core.editor "nano"

Tienes que cambiar nano a cualquier comando que normalmente abra tu editor de texto.

vikhyat
fuente
15
¿No tienes que agregar --globalpara cambiar el valor predeterminado?
Znarkus
4
@Znarkus buen punto. Consulte aquí para obtener más información. Básicamente, la respuesta dada solo cambiaría la configuración del proyecto actual, mientras que la --globalcambia para el usuario actual y la --systemcambia para todos en esa computadora.
Matt Fenwick
24
Si bien esta respuesta contiene buena información, no aborda la pregunta real.
Adrian Schmidt
5
No veo por qué esto tiene el doble de votos positivos como algunas de las respuestas que REALMENTE responden a la pregunta. Esto no lo hace.
Johan
2
@Johan, no te equivocas, pero habiendo tropezado con esto, encontré esta respuesta extremadamente útil. Así que lo voté a favor.
Danation
65

Como lo mencionó Ben Collins , sin el -m "..."argumento para escribir el compromiso en línea (lo cual generalmente es una mala idea ya que lo alienta a ser breve), este "archivo de texto grande" que se abre es una ventana en la que escribir el mensaje de compromiso .

Por lo general, se recomienda escribir un resumen en la primera línea, omitir una línea y luego escribir notas más detalladas debajo; esto ayuda a los programas que hacen cosas como enviar por correo electrónico los mensajes de confirmación con una línea de asunto apropiada y la lista completa de cambios realizados en el cuerpo.

En lugar de cambiar la EDITORvariable de shell, también puede cambiar el editor utilizado agregando líneas adicionales en su ~/.gitconfigarchivo:

[core]
    editor = emacs
    excludesfile = /Users/will/.gitignore

Esa segunda línea en realidad no tiene nada que ver con su problema, pero la encuentro realmente útil para poder completar mi ~/.gitignorearchivo con todos esos tipos de archivos que que nunca, nunca, querré comprometerme con un repositorio.

Will Robertson
fuente
36

El archivo de texto que se está abriendo es un resumen de la operación de confirmación actual. La confirmación de git lo coloca en este archivo para que pueda agregar un mensaje de confirmación en la parte superior del archivo. Una vez que haya agregado su mensaje, simplemente guarde y salga de este archivo.

También hay un modificador "-m msg" en este comando que le permite agregar el mensaje de confirmación en la línea de comandos.

Lou
fuente
Hola Lou, también soy un principiante en GIt. Creo que después de que existo o escribo y existo el archivo de texto, el git no confirmó la puesta en escena y el mensaje de confirmación que acabo de escribir. Entonces, ¿cuál es el significado de agregar el mensaje a este archivo de texto si no puedo realizar el compromiso después de escribirlo y salir? (corríjame si me equivoqué, muchas gracias)
SLN
@SLN El escenario que está describiendo no es muy claro. Voy a adivinar y sugerir que tal vez no haya preparado ningún archivo para su confirmación, por lo tanto, su intento de confirmación no hizo nada. Use "git add" para los archivos de la primera etapa que desea confirmar, luego "git commit" para realizar la confirmación real.
Lou
15

Si está en Mac OS X y usa BBEdit, puede configurarlo como el editor de elección para los mensajes de confirmación:

git config --global core.editor "bbedit -w"

Una vez que haya terminado de editar, guarde y cierre el archivo y git lo usará para los comentarios.


fuente
15

Suponiendo que su editor por defecto es vi / vim, puede salir del editor de mensajes de confirmación escribiendo:

:x

que guardará y saldrá del archivo de mensaje de confirmación. Luego, volverá a la sección normal de comandos de git.

Más comandos vi:
http://www.lagmonster.org/docs/vi.html

Matías
fuente
9
Si eres como yo, estabas en modo insertar / reemplazar (es decir, escribiendo el mensaje de confirmación). Si es así, tendrá que presionar escpara entrar en el modo de comando antes de escribir :xpara guardar y salir.
Martin Carney
1
Suponiendo, por supuesto, que su editor por defecto es vi / vim. Esto no sería cierto para todos. Ciertamente no para este usuario de emacs;)
haziz
Esto me ahorró muchos problemas. Muchas gracias
Danation
12

Como todos han dicho, aquí es donde agrega su comentario de confirmación, pero para algunos aún puede ser confuso, especialmente si no ha configurado la configuración de su editor y no sabe qué es VI : entonces podría estar en shock , porque pensarás que todavía estás en el GIT-Bash

En ese caso, de hecho, está en un editor de texto con algunas formas interesantes de lidiar con las cosas y este conjunto de comandos puede ayudarlo para que pueda superar su primera confirmación y luego configurar un editor con el que esté familiarizado o usarlo como una oportunidad para aprender a usarlo.

Stephen Bailey
fuente
8
Sé que terminar en vi siempre me sorprende :)
Will Robertson
1
Las cosas tienen mucho más sentido ahora. +1
Matt Ellen
11

La -mopción de confirmar le permite ingresar un mensaje de confirmación en la línea de comando:

git commit -m "my first commit"
Greg Hewgill
fuente
7

Cuando creas una nueva confirmación, git activa un editor de texto y escribe algunas cosas en él.

Con este editor de texto, la intención es que escriba el mensaje de confirmación que se asociará con su confirmación creada recientemente.

Una vez que haya terminado de hacerlo, guarde y salga del editor de texto. Git usará lo que ha escrito como mensaje de confirmación.

El mensaje de confirmación tiene una estructura particular, que se describe a continuación:

La primera línea del mensaje de confirmación se utiliza como encabezado (o título) del mensaje. La longitud preferida del encabezado de confirmación es inferior a 40 caracteres, ya que este es el número de caracteres que muestra github en la pestaña Confirmaciones de un repositorio determinado antes de truncarlo, lo que a algunas personas les resulta irritante.

Al redactar el encabezado, usar un verbo en tiempo presente en mayúsculas para la primera palabra es una práctica común, aunque no es obligatorio.

Una nueva línea delinea el encabezado y el cuerpo del mensaje.

El cuerpo puede consistir en lo que quieras. Una descripción general de los cambios introducidos por su compromiso es razonable. Algunas aplicaciones de terceros usan información incluida en el cuerpo de los mensajes de confirmación para activar varios tipos de ganchos (estoy pensando en Gerrit y Pivotal Tracker, por nombrar dos).

Aquí hay un ejemplo breve y agradable. Un liderazgo# denota un comentario.

Gitignore index.pyc

Ignore gunicorn generated binary file
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch dev
# Your branch is ahead of 'origin/dev' by 10 commits.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitignore
#

Aquí, un Sr. Torvalds opina sobre lo que hace un buen compromiso.

Y aquí Tpope hace lo mismo.

Como se indica en varias otras respuestas, cambiar el editor predeterminado es una línea en la línea de comando.

Para mi preferencia:

git config --global core.editor "vim"
no gracias
fuente
2
esta debería ser la respuesta aceptada para la pregunta.
mppfiles
6

Prueba Escape y luego ZZ, cuando hayas terminado de escribir tu mensaje. Como han dicho otros, cuando ejecuta ese comando de confirmación, en realidad ejecuta un editor de texto para ingresar el mensaje. En mi caso (OS X) fue VI, que descubrí después de investigar un poco. En ese caso, presione Escape para entrar en el modo "comando" (a diferencia del modo INSERT) y luego ingrese ZZ. Estoy seguro de que hay otras formas de realizar la tarea, pero eso me sirvió. No habiendo usado nunca VI o emacs, no era evidente para mí y no se mencionaba en ninguna de las guías para principiantes que estaba usando. Ojalá esto ayude.

TheGeoff
fuente
4

El git commitcomando abrirá el editor especificado en la EDITORvariable de entorno para que pueda ingresar un comentario de confirmación. En un sistema Linux o BSD, debería ser vi por defecto, aunque cualquier editor debería funcionar.

Simplemente ingrese sus comentarios y guarde el archivo.

Ben Collins
fuente
2

Estaba confundido porque seguía intentando ingresar un nombre de archivo después de: w en VIM. Eso no desencadena el compromiso. En su lugar, seguí recibiendo un mensaje "Anulando la confirmación debido a un mensaje de confirmación vacío". No ponga un nombre de archivo después de: w. : w guarda el archivo en .git / COMMIT_EDITMSG de forma predeterminada. Luego: q para salir para completar el compromiso. Puedes ver los resultados con git log.

usuario360221
fuente
o simplemente puede usar: x para guardar y salir.
TJ Ellis
2

Ahora que cambié mi editor a emacs, todo funciona bien.

Pero antes de establecer esto, "git commit -a" abrió gedit, pero también terminó inmediatamente con un "Anulando el compromiso debido a un mensaje de compromiso vacío". Guardar el archivo de gedit no tuvo ningún efecto. La configuración explícita del editor con "git config --global core.editor" gedit "" tuvo el mismo resultado.

No hay nada de malo con emacs, pero por curiosidad, ¿por qué esto no funciona con gedit y hay alguna forma de hacerlo funcionar?

Gracias.

Pedro
fuente
si gedit ya se está ejecutando, al hacer "gedit file.txt" se abrirá el archivo en la ventana existente e inmediatamente regresará ... debe publicar esto como una pregunta real, específicamente sobre el uso de gedit con git.
araqnid
6
me encontré con esto también. puede solucionarlo configurando gedit para que se ejecute en modo 'independiente':git config --global core.editor "gedit -s"
brittohalloran
2

Para aquellos de ustedes que usan OS X, este comando funciona bien:
git config --global core.editor "open -t -W"

lo que obligará a git a abrir el editor de texto predeterminado (textedit en mi caso) y luego esperará a que salga de la aplicación. Tenga en cuenta que debe "Guardar" y luego "Salir" antes de que se complete la confirmación. Hay algunos otros comandos con los que puede jugar como se detalla en esta página:

Biblioteca de desarrolladores de Apple - Abrir comando

También puede intentarlo git config --global core.editor "open -e -W"si desea que git siempre abra textedit independientemente del editor predeterminado.

JiuJitsuCoder
fuente
1

Sí, asegúrese de tener un editor sensato. No estoy seguro de cuál será su editor predeterminado, pero si, como yo, es nano (dirá en algún lugar cerca de la parte superior después de escribir confirmar) solo necesita escribir un comentario y luego presionar Ctrl-x para terminar. Luego presiona y, seguido de enter para confirmar el compromiso.

Además, si desea ver una lista simple de los archivos que comprometerá en lugar de una gran lista de diferencias, intente de antemano

git diff --name-only
Tom Martin
fuente
1

Al realizar el control de revisión, siempre debe explicar cuáles son los cambios que realizó. Por lo general, la primera vez que tiene un comentario como "Confirmación inicial".

Sin embargo, a la larga, querrás hacer un buen comentario para cada confirmación. Querrás algo de la forma:

Característica experimental agregada x.

X aumentará el rendimiento de la función Y en la condición Z. Si necesita X, actívela con los interruptores -x o --feature-eks. Esto aborda la solicitud de función # 1138.

Fuego
fuente
1

Siendo nuevo en Terminal también, "Escape y luego ZZ" funcionó para mí, he tenido este problema durante meses y tampoco pude encontrar una manera de solucionarlo.

¡Gracias TheGeoff por tu sencillo consejo!

Yarito
fuente
0

La siguiente es probablemente la forma más fácil de confirmar todos los cambios:

git commit -a -m "Type your commit message here..."

Por supuesto, hay formas mucho más detalladas de comprometerse, pero eso debería ayudarlo a comenzar.

PHLAK
fuente