Como alterar uma confirmação sem alterar a mensagem de confirmação (reutilizando a anterior)?


657

Existe uma maneira de alterar uma confirmação sem vi(ou a sua $EDITOR) aparecer com a opção de modificar sua mensagem de confirmação, mas simplesmente reutilizando a mensagem anterior?


6
Eu votaria na minha própria pergunta depois de aprender da maneira mais difícil os males de corrigir.
Sridhar Sarnobat

28
Contanto que você cumpra certas regras (como não alterar algo que já foi enviado), não há razão para que a alteração seja uma coisa ruim.
paullb

3
As confirmações de correção não devem ser usadas para confirmação intermitente de trabalho durante uma única alteração lógica. Por que você deve comprometer localmente de forma adequada e, em seguida, esmagar a história cometer uma vez acabado (@ Sridhar-Sarnobat)
DBCerigo

3
Concordo plenamente @DBCerigo. A única situação que considero útil é quando eu esqueci de preparar um arquivo em um commit anterior (por exemplo, porque ele é novo e, portanto, não é preparado automaticamente ao executar o git commit -a) e deseja confirmá-lo retroativamente.
Sridhar Sarnobat

1
Em outra ocasião, a correção é útil, mesmo que você reconheça os perigos de alterar o histórico, se estiver insatisfeito com a mensagem de confirmação mais recente e quiser reformulá-la sem precisar refazer a revisão.
Sridhar Sarnobat 30/0318

Respostas:


1011

Desde a versão git 1.7.9, você também pode usar git commit --amend --no-editpara obter seu resultado.

Observe que isso não incluirá metadados de outras confirmações, como o carimbo de data / hora, que pode ou não ser importante para você.


42
Você também pode tornar mais fácil para o padrão para a bandeira --no-editar, adicionando um apelido: "alterar = commit -a --amend --no-edit"
Jherico

1
@ Jerico eu sugiro remover -a. Por favor, faça confirmações atômicas, é muito mais fácil revisar ou rebase :)
frouo 08/04

120

git commit -C HEAD --amendfará o que você quiser. A -Copção pega os metadados de outra confirmação.


15
Apenas para adicionar à resposta de Andy. Se isso é algo que você faz com frequência, pode configurar um alias para isso usando git config --global alias.amend 'commit --amend -C HEAD'. Você pode usar git amendcomo um atalho.
MikeJ

9
Vamos lá pessoal, não seja preguiçoso, atualize o git e use o comando interno sugerido pelo Shaggle! Mais uma opção para -C.
precisa

4
Não apenas carimbo de data e hora, mas também as informações de autoria!
user1338062

3
@RyanCastner De fato, o comentário a que você está se referindo foi de 2013. Com a versão git que estou executando atualmente --amend, mesmo sem nenhuma outra opção, preserva a data do autor (mas altera a data de confirmação). Como tal, removi o meu antigo comentário.
Ruben Verborgh

2
Na verdade, essa resposta é valiosa de uma maneira diferente, mesmo que não seja a resposta aceita. Ao contrário da outra resposta, você não precisa usar —amend. Você pode criar uma nova confirmação, mas usar a mesma mensagem que a confirmação anterior. Isso pode não parecer útil, mas a minha mensagem de confirmação por padrão quando eu só estou salvando meu trabalho sem ter que pensar em uma boa mensagem de commit, eu continuo reutilizar a mensagem—message=“Work in progress (untested)”
Sridhar Sarnobat

67

Outra possibilidade (boba) é git commit --amend <<< :wqse você tem vi (m) como $EDITOR.


39
Mesmo que isso não seja necessário para este caso de uso, eu não sabia que você pode usar o vim. Isso abre algumas possibilidades intrigantes. Ótima dica.
Sridhar Sarnobat

6
... <<< ZZpode ser ainda menos digitação;)
Ruslan

6
..e ainda menos - ... <<< :x:)
skwisgaar

3
Eu não acho isso bobo. É uma ótima maneira de melhorar o fluxo de trabalho de qualquer comando que abra o vi.
B Seven

12
colchetes de ângulo triplo. essa é nova.
Oligofren

16

Para estender a resposta aceita, você também pode:

git commit --amend --no-edit -a

para adicionar os arquivos alterados no momento.


11

Usando a resposta aceita para criar um alias

 oops = "!f(){ \
    git add -A; \
    if [ \"$1\" == '' ]; then \
        git commit --amend --no-edit; \
    else \
        git commit --amend \"$@\"; \
    fi;\
}; f"

então você pode fazer

git oops

e ele adiciona tudo e altera usando a mesma mensagem

ou

git oops -m "new message"

alterar substituindo a mensagem

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.