2014-05-09 16:48:06 +0000 2014-05-09 16:48:06 +0000
135
135

Existe alguma forma de editar uma mensagem de compromisso no GitHub?

Existe alguma forma de editar uma mensagem de compromisso depois de se comprometer e empurrar para o GitHub? Vejo que existe uma “adição de uma nota”, bem como comentários em linha, mas nenhuma edição real de uma mensagem de submissão. Há também ‘emendar commit’ nas extensões do git, mas isso não edita a mensagem existente.

Respostas (5)

189
189
189
2014-05-10 10:27:44 +0000
  1. git rebase -i <commit hash you want to change>^

  2. Para qualquer compromisso que deseje alterar a mensagem, altere pick para reword.

  3. Guardar e abandonar (no vi: :wq).

  4. Para cada commit, receberá um editor para editar a mensagem de commit. Altere-a como achar conveniente, salve e desista.

  5. Pode agora carregá-los para o github, usando git push origin --force.

Se precisar apenas de corrigir a sua última submissão, pode substituir os passos 1-4 por git commit --amend.

35
35
35
2018-06-18 09:49:45 +0000

Na Intellij Idea pode fazê-lo tão facilmente.

  1. Controlo da Versão Aberta (Histórico)
  2. Seleccionar separador de registo
  3. Seleccione commit para alterar o comentário
  4. prima F2 (Mac fn + F2), e actualize a sua mensagem de commit
3
3
3
2019-03-14 07:29:36 +0000

Premise:

se o seu git-graph se parece com …

O target-commit that you want to change its message [df9c192]
|
O parent-commit [b7ec061]
|
O

(df9c192 e b7ec061 são os hashes de commit de target-commit e parent-commit, separadamente)

Solução:

pode apenas digitar as seguintes instruções…

git reset --soft b7ec061
git commit -m "your_new_description"
git push -f

Explicação:

  1. git reset --soft b7ec061 manterá as suas alterações de ficheiros e reiniciará para parent-commit (isto é, b7ec061)
  2. git commit -m "..." irá criar localmente um novo commit
  3. git push -f irá empurrar a sua nova submissão para o servidor e substituir a antiga (i.e. df9c192)
2
2
2
2018-08-08 22:27:59 +0000

Outra opção é criar uma “errata commit” adicional (e empurrar) que faz referência ao objecto commit que contém o erro – a nova errata commit também fornece a correcção. Uma submissão de errata é uma submissão sem alterações de código substantivo, mas uma mensagem de submissão importante – por exemplo, adicione um carácter de espaço ao seu ficheiro readme e submeta essa alteração com a mensagem de submissão importante, ou utilize a opção --allow-empty. É certamente mais fácil e mais seguro do que rebasear, não modifica a história verdadeira, e mantém a árvore de ramos limpa (usando amend é também uma boa escolha se estiver a corrigir o commit mais recente, mas um commit de errata pode ser uma boa escolha para commits mais antigos). Este tipo de coisas acontece tão raramente que simplesmente documentar o erro é suficientemente bom. No futuro, se precisar de procurar através de um registo de erros por uma palavra-chave, o commit original (errôneo) pode não aparecer porque a palavra-chave errada foi usada nesse commit original (o erro de digitação original) – no entanto, a palavra-chave aparecerá no commit de errata que lhe indicará então o commit original que teve o erro de digitação. Aqui está um exemplo:

$ git log commit 0c28141c68adae276840f17ccd4766542c33cf1d Author: First Last Date: Wed Aug 8 15:55:52 2018 -0600 Errata commit: This commit has no substantive code change. THis commit is provided only to document a correction to a previous commit message. This pertains to commit object e083a7abd8deb5776cb304fa13731a4182a24be1 Original incorrect commit message: Changed background color to red Correction (\*change highlighted\*): Changed background color to \*blue\* commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 Author: First Last Date: Wed Aug 8 15:43:16 2018 -0600 Some interim commit message commit e083a7abd8deb5776cb304fa13731a4182a24be1 Author: First Last Date: Wed Aug 8 13:31:32 2018 -0600 Changed background color to red
0
0
0
2019-08-24 11:01:51 +0000

Resposta de @Mureinik é bom mas não é compreensível para os novatos.

Primeiro método:

  1. Se só quer editar a última mensagem de compromisso, então só precisa de git commit --amend, veria:
<your existing commit mesage foo bar> 

# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# On branch is up to date with 'origin/master'.
#
# changes to be committed:
# modified: foo.py
#
  1. Como pode ver, submeter mensagem no topo sem qualquer prefixo de comando como pick, esta já é a ** página de edição*** e pode dirigir editar a mensagem no topo e save&quit* , por exemplo
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. Depois faça git push -u origin master --force ou <how you push normally> --force. A chave aqui é --force.

Segundo método:

  1. Pode-se ver o hash de commit por git log ou extracto da url do repositório, exemplo no meu caso é 881129d771219cfa29e6f6c2205851a2994a8835

  2. Depois pode fazer git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835 ou git rebase -i HEAD^ (se o mais recente)

  3. Verá:

pick <commit hash> <your current commit message>

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
  1. Mas se vir noop então provavelmente está a escrever mal, por exemplo, se fizer git rebase -i 881129d771219cfa29e6f6c2205851a2994a88 que falta ^ no final, é melhor abandonar o editor sem guardar e descobrir o motivo:
noop

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
...
  1. Se não houver noop edição, então simplesmente mude a palavra pick para reword , outros apenas restam (não edita a mensagem de compromisso neste ponto), e. g:
reword <commit hash> <your current commit message>

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
...
  1. Save&quit verá a página edit semelhante ao método #1:
<your existing commit mesage foo bar> 

# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# interactive rebase in progress; onto b057371
# Last command done (1 command done):
# reword d996ffb <existing commit message foo bar>
# No commands remaining.
# You are currently editing a commit while rebasing branch 'master' on 'b057371'.
#
# changes to be committed:
# modified: foo.py
#
  1. Edite a mensagem por cima, tal como o método #1 e save&quit, por exemplo:
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. Mais uma vez, tal como o método #1, faça git push -u origin master --force ou <how you push normally> --force. A chave aqui é --force.

Para mais informações, por favor leia o doc .