O Git commit abre um arquivo de texto em branco, para quê?

93

Em todos os tutoriais do Git que li, eles dizem que você pode fazer:

git init
git add .
git commit

Quando faço isso, um grande arquivo de texto é aberto. Nenhum dos tutoriais parece abordar isso, então não sei o que fazer com o arquivo ou o que colocar nele, se alguma coisa.

aleatória
fonte

Respostas:

124

Você deve colocar a mensagem de confirmação neste arquivo de texto, depois salvar e sair.

Você pode alterar o editor de texto padrão que o git usa com este comando:

git config --global core.editor "nano"

Você tem que mudar o nano para qualquer comando que normalmente abriria seu editor de texto.

vikhyat
fonte
15
Você não precisa adicionar --globalpara alterar o padrão?
Znarkus
4
@Znarkus bom ponto. Veja aqui para mais informações. Basicamente, a resposta dada mudaria apenas a configuração para o projeto atual, ao passo que --globalmuda para o usuário atual e --systemmuda para todos naquele computador.
Matt Fenwick de
24
Embora essa resposta contenha boas informações, ela não aborda a questão real.
Adrian Schmidt
5
Não vejo por que isso tem o dobro de votos positivos como algumas das respostas que REALMENTE respondem à pergunta. Isso não funciona.
Johan
2
@Johan, você não está errado, mas, tendo tropeçado nisso, achei a resposta extremamente útil. Então eu votei a favor.
Danation
65

Como mencionado por Ben Collins , sem o -m "..."argumento para digitar o commit inline (o que geralmente é uma má ideia, pois incentiva você a ser breve), este "grande arquivo de texto" que é aberto é uma janela na qual digitar a mensagem de commit .

Normalmente, é recomendável escrever um resumo na primeira linha, pular uma linha e escrever notas mais detalhadas abaixo; isso ajuda os programas que fazem coisas como enviar por e-mail as mensagens de confirmação com uma linha de assunto apropriada e a lista completa de alterações feitas no corpo.

Em vez de alterar a EDITORvariável shell, você também pode alterar o editor usado adicionando as linhas adicionais em seu ~/.gitconfigarquivo:

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

Essa segunda linha na verdade não tem nada a ver com o seu problema, mas acho que é muito útil para que eu possa preencher meu ~/.gitignorearquivo com todos os tipos de arquivos que sei que nunca, jamais, irei enviar para um repositório.

Will Robertson
fonte
36

O arquivo de texto que está sendo aberto é um resumo da operação de confirmação atual. O git commit coloca você neste arquivo para que você possa adicionar uma mensagem de commit no topo do arquivo. Depois de adicionar sua mensagem, salve e saia deste arquivo.

Há também uma opção "-m msg" neste comando que permite adicionar a mensagem de confirmação na linha de comando.

Lou
fonte
Olá, Lou, também sou iniciante em GIt. Acho que depois que existo ou escrevo e existo o arquivo de texto, o git não fez o commit do teste e da mensagem de commit que acabei de escrever. Então, qual é o significado de adicionar a mensagem a este arquivo de texto se eu não posso fazer o commit após escrever e sair dele. (por favor, corrija-me se eu estava errado, muito obrigado)
SLN
@SLN O cenário que você está delineando não é muito claro. Vou dar um palpite e sugerir que talvez você não tenha preparado nenhum arquivo para commit, portanto, sua tentativa de commit não fez nada. Use "git add" para o primeiro estágio dos arquivos que você deseja enviar e, em seguida, "git commit" para realizar o commit real.
Lou
15

Se você estiver no Mac OS X e usando o BBEdit, poderá configurá-lo como o editor preferido para enviar mensagens:

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

Depois de terminar a edição, salve e feche o arquivo e o git o usará para os comentários.


fonte
15

Assumindo que o padrão do seu editor é vi / vim, você pode sair do editor de mensagens de commit digitando:

:x

que salvará e sairá do arquivo de mensagem de confirmação. Em seguida, você voltará para a seção normal de comandos git.

Mais comandos vi:
http://www.lagmonster.org/docs/vi.html

MatthiasS
fonte
9
Se você for como eu, você estava no modo inserir / substituir (ou seja, digitando a mensagem de confirmação). Nesse caso, você terá que clicar escpara entrar no modo de comando antes de digitar :xpara salvar e sair.
Martin Carney
1
Assumindo, é claro, que o padrão de seu editor é vi / vim. Isso não seria verdade para todos. Certamente não para este usuário emacs;)
haziz
Isso me salvou de muitos problemas. Muito obrigado
Danation
12

Como todos disseram, é apenas onde você adiciona seu comentário de confirmação - mas para alguns ainda pode ser confuso, esp se você não tiver configurado as configurações do editor e não estiver ciente de qual VI é : então você pode ficar em choque , porque você vai pensar que ainda está no GIT-Bash

Nesse caso, você está de fato em um editor de texto com algumas maneiras interessantes de lidar com as coisas e este conjunto de comandos pode ajudá-lo para que você possa passar de seu primeiro commit e então configurar um editor com o qual esteja familiarizado ou usá-lo como uma oportunidade de aprender como usá-lo.

Stephen Bailey
fonte
8
Eu sei que acabar no VI sempre me choca :)
Will Robertson
1
As coisas fazem muito mais sentido agora. +1
Matt Ellen
11

A -mopção de confirmação permite inserir uma mensagem de confirmação na linha de comando:

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

Quando você cria um novo commit, git abre um editor de texto e escreve algumas coisas nele.

Usando este editor de texto, a intenção é que você escreva a mensagem de commit que será associada ao seu commit criado gratuitamente.

Depois de fazer isso, salve e saia do editor de texto. O Git usará o que você escreveu como a mensagem de confirmação.

A mensagem de confirmação tem uma estrutura particular, descrita a seguir:

A primeira linha da mensagem de confirmação é usada como cabeçalho (ou título) da mensagem. O comprimento preferido do cabeçalho do commit é inferior a 40 caracteres, pois este é o número de caracteres que o github exibe na guia Commits de um determinado repositório antes de truncá-lo, o que algumas pessoas acham irritante.

Ao redigir o cabeçalho, usar um verbo no tempo presente em maiúscula para a primeira palavra é uma prática comum, embora não seja obrigatório.

Uma nova linha delineia o cabeçalho e o corpo da mensagem.

O corpo pode consistir no que você quiser. Uma visão geral das mudanças introduzidas por seu commit é razoável. Alguns aplicativos de terceiros usam informações que incluem o corpo de mensagens de confirmação para desencadear vários tipos de ganchos (estou pensando em Gerrit e Pivotal Tracker, para citar dois).

Aqui está um exemplo curto e doce. Uma liderança #denota um comentário.

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
#

Aqui um Sr. Torvalds opina sobre o que torna um bom commit.

E aqui Tpope faz o mesmo.

Conforme declarado em várias outras respostas, alterar o editor padrão é uma linha na linha de comando.

Para minha preferência:

git config --global core.editor "vim"
não obrigado
fonte
2
esta deve ser a resposta aceita para a pergunta.
mppfiles de
6

Tente Escape e, em seguida, ZZ, após terminar de digitar sua mensagem. Como outros disseram, quando você executa o comando commit, ele executa um editor de texto para inserir a mensagem. No meu caso (OS X) foi VI, que descobri depois de algumas pesquisas. Nesse caso, pressione Escape para entrar no modo "comando" (em oposição ao modo INSERT) e digite ZZ. Tenho certeza de que existem outras maneiras de realizar a tarefa, mas isso funcionou para mim. Como nunca usei VI ou emacs, não foi imediatamente aparente para mim e não foi mencionado em nenhum dos guias para iniciantes que eu estava usando. Espero que isso ajude.

TheGeoff
fonte
4

O git commitcomando abrirá o editor especificado na EDITORvariável de ambiente para que você possa inserir um comentário de confirmação. Em um sistema Linux ou BSD, deve ser vi por padrão, embora qualquer editor deva funcionar.

Basta inserir seus comentários e salvar o arquivo.

Ben Collins
fonte
2

Eu estava confuso porque ficava tentando inserir um nome de arquivo após: w no VIM. Isso não aciona o commit. Em vez disso, continuei recebendo uma mensagem "Abortando o commit devido à mensagem de commit vazia." Não coloque um nome de arquivo após: w. : w salva o arquivo em .git / COMMIT_EDITMSG por padrão. Então: q sair para completar o commit. Você pode ver os resultados com o git log.

user360221
fonte
ou você pode apenas usar: x para salvar e sair.
TJ Ellis
2

Agora que mudei meu editor para emacs, tudo funciona bem.

Mas antes de definir isso, "git commit -a" abriu o gedit, mas também terminou imediatamente com "Abortando o commit devido à mensagem de commit vazia.". Salvar o arquivo do gedit não teve efeito. Definir explicitamente o editor com "git config --global core.editor" gedit "" teve o mesmo resultado.

Não há nada de errado com o emacs, mas por curiosidade, por que isso não funciona com o gedit e há alguma maneira de fazê-lo funcionar?

Obrigado.

Peter
fonte
se o gedit já estiver em execução, fazer "gedit file.txt" abrirá o arquivo na janela existente e retornará imediatamente ... você deve postar isso como uma pergunta real, especificamente sobre como usar o gedit com o git.
araqnid
6
correu para isso também. você pode corrigi-lo configurando o gedit para ser executado no modo 'autônomo':git config --global core.editor "gedit -s"
brittohalloran
2

Para aqueles que usam OS XI, este comando funciona bem:
git config --global core.editor "open -t -W"

o que forçará o git a abrir o editor de texto padrão (textedit no meu caso) e então esperar que você saia do aplicativo. Lembre-se de que você precisa "Salvar" e, em seguida, "Sair" por mensagem de texto antes que o commit seja concluído. Existem alguns outros comandos com os quais você pode brincar, conforme detalhado nesta página:

Biblioteca de desenvolvedores Apple - Comando aberto

Você também pode tentar git config --global core.editor "open -e -W"se deseja que o git sempre abra o texto, independentemente de qual seja o editor padrão.

JiuJitsuCoder
fonte
1

Sim, certifique-se de ter um conjunto de editores sensato. Não tenho certeza de qual será o seu editor padrão, mas se, como eu, for nano (dirá em algum lugar próximo ao topo depois de digitar commit), você só precisa digitar um comentário e pressionar Ctrl-x para terminar. Em seguida, pressione y, seguido de enter para confirmar o commit.

Além disso, se você quiser ver uma lista simples dos arquivos que irá enviar ao invés de uma lista enorme de diferenças, tente

git diff --name-only
Tom Martin
fonte
1

Ao fazer o controle de revisão, você deve sempre explicar quais são as alterações feitas. Normalmente, a primeira vez que você tem um comentário como "Confirmação inicial".

No entanto, a longo prazo, você deseja fazer um bom comentário para cada commit. Você vai querer algo no formato:

Adicionado recurso experimental x.

X aumentará o desempenho do recurso Y na condição Z. Se você precisar do X, ative-o com as opções -x ou --feature-eks. Isso atende à solicitação de recurso nº 1138.

Chama
fonte
1

Ser novo no Terminal também, "Escape and then ZZ" funcionou para mim, estou tendo esse problema há meses e também não conseguia encontrar uma maneira de contornar isso.

Obrigado TheGeoff pelo seu conselho simples!

Yarito
fonte
0

O seguinte é provavelmente a maneira mais fácil de confirmar todas as alterações:

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

É claro que existem maneiras muito mais detalhadas de se comprometer, mas isso deve ajudá-lo a começar.

PHLAK
fonte