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.