Git commit abre el file de text en blanco, ¿para qué?

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

git init git add . git commit 

Cuando hago eso, obtengo un gran file de text abierto. Ninguno de los tutoriales parece abordar esto, por lo que no sé qué hacer con el file o qué include en él, en todo caso.

Debe colocar el post de confirmación en este file de text, luego save y salir.

Puede cambiar el editor de text pnetworkingeterminado que git usa con este command:

 git config --global core.editor "nano" 

Tienes que cambiar nano a cualquier command que normalmente abra tu editor de text.

Como mencionó Ben Collins , sin el argumento -m "..." para escribir el compromiso en línea (que generalmente es una mala idea porque lo alienta a ser breve), este" file de text grande "que se abre es una window en el que escribir el post de compromiso.

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

En lugar de cambiar la EDITOR shell de EDITOR , también puede cambiar el editor utilizado al agregar las líneas adicionales en su file ~/.gitconfig :

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

Esa segunda línea en realidad no tiene nada que ver con tu problema, pero me parece realmente útil para que pueda llenar mi file ~/.gitignore con todos esos types de files que que nunca, nunca, ~/.gitignore comprometer con un repository.

El file de text que se abre es un resumen de la operación de confirmación actual. El git commit te deja en este file para que puedas agregar un post de confirmación en la parte superior del file. Una vez que haya agregado su post solo guarde y salga de este file.

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

Suponiendo que su editor está por defecto en vi / vim, puede salir del editor de posts de confirmación escribiendo:

 :x 

que saveá y saldrá del file de post de confirmación. Luego volverás a la sección de command normal de git.

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

Si utiliza Mac OS X y usa BBEdit, puede configurarlo como editor de elección para los posts de confirmación:

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

Una vez que termine de editar, guarde y cierre el file y git lo usará para los comentarios.

La opción -m para confirmar le permite ingresar un post de confirmación en la línea de command:

 git commit -m "my first commit" 

Como todos han dicho, aquí es donde agregas el comentario de confirmación, pero para algunos puede ser confuso si no has configurado tu editor y no estás al tanto de qué es VI : entonces podrías recibir un shock , porque pensarás que todavía estás en el GIT-Bash

En ese caso, de hecho está en un editor de text con algunas forms interesantes de manejar las cosas y este set de commands puede ayudarlo para que pueda pasar su primer compromiso y luego configurar un editor con el que esté familiarizado o usarlo como una oportunidad de aprender a usarlo.

Cuando creas un nuevo commit, git activa un editor de text y escribe algunas cosas en él.

Usando este editor de text, la intención es que usted escriba el post de compromiso que se asociará con su compromiso creado recientemente.

Después de que haya terminado de hacerlo, guarde y salga del editor de text. Git usará lo que has escrito como post de compromiso.

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

La primera línea del post de confirmación se usa como el encabezado (o título) del post. La longitud preffenetworking del encabezado de confirmación es de less de 40 caracteres, ya que este es el número de caracteres que github muestra en la pestaña Commits de un repository determinado antes de truncarlo, lo que algunas personas consideran irritante.

Al componer el encabezado, usar un verbo en time presente en mayúscula para la primera palabra es una práctica común, aunque no obligatoria en absoluto.

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

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

Aquí hay un breve y dulce ejemplo. Un # líder denota un comentario.

 Gitignore index.pyc Ignore gunicorn generated binary file # Please enter the commit message for your changes. Lines starting # with '#' will be ignonetworking, 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 señor 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 pnetworkingeterminado es una sola línea en la línea de command.

Para mi preference:

 git config --global core.editor "vim" 

Pruebe Escape y luego ZZ, después de que termine de escribir su post. Como otros han dicho al ejecutar ese command de confirmación, en realidad ejecuta un editor de text para ingresar el post. En mi caso (OS X) fue VI, que descubrí después de cavar un poco. En ese caso, presione Escape para pasar al modo "command" (a diferencia del modo INSERT), ingrese ZZ. Estoy seguro de que hay otras forms de llevar a cabo la tarea, pero eso fue lo que hizo. Nunca utilicé VI o emacs y no me resultó evidente y no fue mencionado en ninguna de las guías para principiantes que estaba usando. Espero que esto ayude.

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

Simplemente ingrese sus comentarios y guarde el file.

Sí, asegúrate de tener un editor sensato. No estoy seguro de cuál será su editor pnetworkingeterminado, pero si, como yo, es nano (dirá algo cerca de la parte superior después de escribir commit), solo tiene que escribir un comentario y luego presionar Ctrl-x para finalizar. Luego presiona y, luego ingresa para confirmar la confirmación.

Además, si desea ver una list simple de los files que va a cometer en lugar de una gran list de diff antes de intentarlo

 git diff --name-only 

Al hacer un control de revisión, siempre debes explicar qué cambios has hecho. Por lo general, la primera vez que tiene un comentario como "compromiso inicial".

Sin embargo, a la larga, desea hacer un buen comentario para cada compromiso. Querrá algo de la forma:

Se agregó una característica experimental x.

X boostá el performance de la característica Y en la condición Z. En caso de que necesite X, actívela con los interruptores -x o –feature-eks. Esto dirige la request de function # 1138.

Estaba confundido porque seguí tratando de ingresar un nombre de file después de: w en VIM. Eso no desencadena la confirmación. En cambio, seguí recibiendo un post "Cancelación de compromiso debido a un post de compromiso vacío". No coloque un nombre de file después de: w. : w guarda el file en .git / COMMIT_EDITMSG de forma pnetworkingeterminada. Luego: q para salir para completar la confirmación. Puedes ver los resultados con el logging de git.

Ahora que he cambiado mi editor a emacs, todo funciona bien.

Pero antes de configurar esto, "git commit -a" abrió gedit, pero también finalizó inmediatamente con una "Cancelación de compromiso debido a un post de compromiso vacío". Guardar el file desde gedit no tuvo ningún efecto. Establecer explícitamente el editor con "git config –global core.editor" gedit "" tuvo el mismo resultado.

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

Gracias.

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

lo que obligará a Git a abrir el editor de text pnetworkingeterminado (textedit en mi caso) y luego esperar a que salga de la aplicación. Tenga en count que necesita "Guardar" y luego "Cerrar" textedit antes de que se realice la confirmación. Hay algunos otros commands con los que puedes jugar como se detalla en esta página:

Biblioteca de desarrolladores de Apple – Comando abierto

También puede probar git config --global core.editor "open -e -W" si desea que git abra siempre textedit independientemente de cuál sea el editor pnetworkingeterminado.

Al ser nuevo en la Terminal también, "Escape y luego ZZ" funcionó para mí, he estado teniendo este problema durante meses y tampoco he podido encontrar una forma de evitarlo.

¡Gracias TheGeoff por tu simple consejo!

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

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

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