Como posso preparar e confirmar todos os arquivos, incluindo arquivos adicionados recentemente, usando um único comando?

425

Como posso preparar e confirmar todos os arquivos, incluindo arquivos adicionados recentemente, usando um único comando?

Anantha Kumaran
fonte
3
O frustrante é que isso costumava ser possível e era uma sintaxe padrão para confirmar e adicionar novos arquivos: git commit -a Mas, fiel à forma, a sintaxe do git mudou. Confundiu os usuários existentes (e quebrou seus scripts), eliminou a funcionalidade útil e substituiu um sinalizador desnecessário.
fijiaaron
1
Existe uma duplicata disso no git add -A, git commit em um comando? . A resposta aceita aqui é semelhante à resposta aceita aqui, mas sugere a criação de um alias do git para diminuir a digitação envolvida (e mostra como fazê-lo).
Mark-
Possível duplicado de git add e se comprometer em um comando
Luciano

Respostas:

568

Faz

git add -A && git commit -m "Your Message"

contar como um "comando único"?

Edite com base na resposta de @ thefinnomenon abaixo :

Para tê-lo como git alias, use:

git config --global alias.coa '!git add -A && git commit -m'

e confirme todos os arquivos, incluindo novos arquivos, com uma mensagem com:

git coa "A bunch of horrible changes"

Explicação (da git adddocumentação ):

-A, --all, --no-ignore-remoção

Atualize o índice não apenas onde a árvore de trabalho possui um arquivo correspondente, mas também onde o índice já possui uma entrada. Isso adiciona, modifica e remove entradas de índice para corresponder à árvore de trabalho.

Se não <pathspec>for fornecido quando a opção -A for usada, todos os arquivos em toda a árvore de trabalho serão atualizados (versões antigas do Git usadas para limitar a atualização ao diretório atual e seus subdiretórios).

Ian Clelland
fonte
3
e a mensagem de confirmação?
Narendra Jaggi
11
@NarendraJaggi git add -A && git commit -m "Your Message"
Dr.jacky
1
pode-se colocar isso em seu próprio arquivo .sh ou .bat e apenas usá-lo como um comando. A mensagem pode ser param1
BlueWizard
E também é possível adicionar atalhos para comandos básicos do git no seu .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'status do git' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset - origem difícil / master '
ni3 3/04
3
No PowerShell, substitua "&&" por ";" para executar os dois comandos, assim:git add -A ; git commit -m "Your Message"
Rafael Miceli 11/11
415

Este comando adicionará e confirmará todos os arquivos modificados, mas não os arquivos recém-criados .

git commit -am  "<commit message>"

No man git-commit:

   -a, --all
       Tell the command to automatically stage files that have been modified
       and deleted, but new files you have not told Git about are not
       affected.
Jai Keerthi
fonte
101
Na verdade, isso não responde à pergunta, na verdade exclui especificamente (em negrito) uma das partes principais da solução procurada.
Arunas 31/08/2015
6
Não adiciona ou confirma arquivos não rastreados.
b15
3
Mas ele cobre a situação mais típica quando você confirma após "git add -A" e percebe que você esqueceu de alterar algo pequeno no código. Eu odeio a escrever a mesma mensagem de confirmação várias vezes a partir do zero
KorbenDallas
mas o iniciador de tópicos diz TODOS OS ARQUIVOS, portanto, acho que este não conta
Frederick G. Sandalo
E também é possível adicionar atalhos para comandos básicos do git no seu .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'status do git' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset - origem difícil / master '
ni3
26

Eu uso esta função:

gcaa() { git add --all && git commit -m "$*" }

No meu arquivo de configuração zsh, para que eu possa fazer:

> gcaa This is the commit message

Preparar e confirmar automaticamente todos os arquivos.

phlppn
fonte
1
para bash-likefunction gcaa() { git add --all && git commit -m "$*" && git push }
Damilola 25/01
1
@ Damilola - o que você quer dizer com bash-like ? a sintaxe na resposta funciona em bash bem
Eliran Malka
isso é legal, eu já usei um apelido como, gaa && gc -m "my commit"mas isso é muito melhor ... <sai correndo para mudar o bashrc ..>
andy mccullough
24

Uma linha para preparar TODOS os arquivos ( modificados , excluídos e novos ) e confirmar com o comentário:

git add --all && git commit -m "comment"

http://git-scm.com/docs/git-add
http://git-scm.com/docs/git-commit

Yarin
fonte
one-liner, mas não um único comando (que é o que pediu ao OP)
Eliran Malka
24

Não sei por que essas respostas dançam em torno da solução que eu acredito ser a melhor, mas o que vale aqui é o que eu uso:

Crie um alias:

git config --global alias.coa '!git add -A && git commit -m'

Adicione todos os arquivos e confirme com a mensagem:

git coa "A bunch of horrible changes"

NOTA: coaé abreviação de comprometer tudo e pode ser substituído por qualquer coisa que seu coração desejar

thefinnomenon
fonte
1
Nenhuma resposta além desta simplifica com êxito o processo de confirmar todos com uma mensagem.
Seph Reed
2
Isso é incrível, estava procurando o git aliascaminho, o resto é chato.
Qortex 28/05/19
9

A confirmação no git pode ser um processo de várias etapas ou uma etapa, dependendo da situação.

  1. Essa situação é onde você tem vários arquivos atualizados e deseja confirmar:

    Você precisa adicionar todos os arquivos modificados antes de confirmar qualquer coisa.

    git add -A
    

    ou

    git add --all
    
  2. Depois disso, você pode usar confirmar todos os arquivos adicionados

    git commit
    

    com isso, você deve adicionar a mensagem para esse commit.

King Linux
fonte
6

Se você quiser apenas uma maneira "rápida e suja" de ocultar alterações na ramificação atual, use o seguinte alias:

git config --global alias.temp '!git add -A && git commit -m "Temp"'  

Após executar esse comando, você pode apenas digitar git temppara que o git confirme automaticamente todas as suas alterações no ramo atual como um commit chamado "Temp". Em seguida, você pode usar git reset HEAD~mais tarde para "descomprimir" as alterações para continuar trabalhando nelas, ou git commit --amendpara adicionar mais alterações ao commit e / ou dar um nome adequado.

Ajedi32
fonte
4

Eu tenho na minha configuração dois aliases:

alias.foo=commit -a -m 'none'
alias.coa=commit -a -m

se eu sou muito preguiçoso, apenas cometo todas as alterações com

git foo

e apenas para fazer um commit rápido

git coa "my changes are..."

coa significa "comprometer tudo"

SystematicFrank
fonte
9
Eu odiaria trabalhar com um repositório cheio de mensagens de confirmação dizendo "none" e rejeitaria qualquer PR nessa base também. Infelizmente, a única maneira de você aprender a importância de ter boas mensagens de confirmação é quando você precisa voltar para auditar algo escrito há muito tempo ("esta linha está causando um bug ... por que foi adicionada, e terá alguma coisa?" quebrar se eu mudar / remover? ").
gregmac
1
As confirmações com "none" nunca pretendem ficar por muito tempo. Normalmente inicio meu próprio ramo de recursos, faço micro commits e os esmago em algo mais razoável antes de uma mesclagem. Obviamente, as pessoas que confirmam para cada função modificada e não se importam com um log git completo não precisam disso.
SystematicFrank
1
Eu uso 'wip' (abreviação de "trabalho em andamento") em vez de 'none' para esse fim e eu apenas envio tais confirmações para meus ramos particulares.
Sergej Koščejev 11/01
Ainda é inútil, porque, eventualmente, aqueles "wip" ou "none" confirmam o processo em um ramo que outras pessoas veem e poluem o log de mensagens. Se você estiver esmagando todos os seus commits antes de pressionar, isso seria aceitável, mas de outra forma ainda será irritante para a equipe.
22416 Jordan
Essa é uma ideia interessante e, combinando-a com a próxima resposta, você pode obter a resposta 100% precisa para o OP. Na verdade, descrevi as etapas necessárias (usando o git-bash) na minha resposta. ( stackoverflow.com/a/43442269/869239 )
VeRo 16/04
3

Execute o comando fornecido

git add . && git commit -m "Changes Committed"

No entanto, mesmo que pareça um único comando, são dois comandos separados, um por um. Aqui nós costumávamos &&combiná-los. Não é muito diferente de correr git add .e git commit -m "Changes Committed"separadamente. Você pode executar vários comandos juntos, mas a sequência é importante aqui. Como se você quiser enviar as alterações para o servidor remoto juntamente com a preparação e a confirmação, poderá fazê-lo conforme o indicado,

git add . && git commit -m "Changes Committed" && git push origin master

Em vez disso, se você alterar a sequência e colocar o pushprimeiro, ele será executado primeiro e não fornecerá o push desejado após a preparação e confirmação apenas porque já foi executado primeiro.

&&executa o segundo comando na linha quando o primeiro comando retornar com sucesso ou com um nível de erro igual a 0. O oposto de &&é ||, que executa o segundo comando quando o primeiro comando não tiver êxito ou com um nível de erro igual a 1.

Como alternativa, você pode criar alise as git config --global alias.addcommit '!git add -a && git commit -m'e usá-lo comogit addcommit -m "Added and commited new files"

Kiran Maniya
fonte
2

Ótimas respostas, mas se você procurar uma linha de singe fazer tudo, poderá concatenar o alias e aproveitar a conveniência:

git add * && git commit -am "<commit message>"

É uma única linha, mas dois comandos, e, como mencionado, você pode alternar os seguintes comandos:

alias git-aac="git add * && git commit -am " (o espaço no final é importante) porque você irá parametrizar o novo comando de mão curta.

A partir deste momento, você estará usando este alias:

git-acc "<commit message>"

Você basicamente diz:

git, adicione para mim todos os arquivos não rastreados e confirme-os com esta mensagem de confirmação.

Espero que você use o Linux, espero que isso ajude.

VeRo
fonte
0

Você pode escrever um pequeno script (veja a resposta de Ian Clelland) chamado git-commitallque usa vários comandos git para executar o que você deseja fazer.
Coloque esse script em qualquer lugar do seu $PATH. Você pode chamá-lo por git commitall... muito útil!

Encontrado aqui (infelizmente, todas as perguntas e respostas foram excluídas, visíveis apenas com alta reputação)

tanascius
fonte
Toda a linha é uma boa leitura ... é por isso que ligou-^^
tanascius
@ Dimitri - infelizmente algumas pessoas do estudo decidiram excluir esse tópico útil. Ainda é visível com grande reputação, por isso mantenho o link aqui.
precisa saber é o seguinte
0

tente usar:

git add . && git commit -m "your message here"
Fóton
fonte