git add, commit e push comandos em um?

220

Existe alguma maneira de usar esses três comandos em um?

git add .
git commit -a -m "commit" (do not need commit message either)
git push

Às vezes, estou mudando apenas uma letra, preenchimento CSS ou algo assim. Ainda assim, tenho que escrever todos os três comandos para fazer as alterações. Existem muitos projetos em que sou apenas um empurrador, então esse comando seria incrível!

Gediminas
fonte
10
Você já tentou escrever um script de shell?
Paul
Existem muitas mudanças no meu código, quando você está alterando apenas um preenchimento em css, ou uma letra e etc. Confirmar mensagens e todos esses comandos acrescentam muito trabalho. Não tentei um script de shell. Como pode ser feito? Obrigado!
Gediminas 25/10
2
"(não precisa enviar mensagem também)" images.wikia.com/dragonball/images/a/a7/Facepalm_227785.jpg
Ajedi32 25/10/2013
2
se você estiver fazendo um commit para cada instância única de uma alteração, estará fazendo errado. fazer o comando É quando você está característica é acabado ou bug é resolvido (isso poderia ser uma única alteração)
Mark

Respostas:

234

Aproveitando a resposta de @ Gavin:

Tornar o lazygit uma função em vez de um alias permite passar um argumento para ele. Adicionei o seguinte ao meu .bashrc (ou .bash_profile se Mac):

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

Isso permite que você forneça uma mensagem de confirmação, como

lazygit "My commit msg"

É claro que você poderia reforçar isso ainda mais, aceitando ainda mais argumentos, como em qual lugar remoto para onde empurrar ou em que ramo.

btse
fonte
10
Reinicie não é necessário, basta fazer ".bashrc source"
Sambit Tripathy
25
poderia usar em $*vez de $1salvar digitando as aspas:lazygit My commit msg
Kai Carver
16
@KaiCarver Bom pensamento, mas pessoalmente eu não gosto. Impede o uso de vários argumentos e também contraria a convenção normal de uma única sequência de caracteres, com espaços sendo colocados entre aspas. Essa é uma segunda natureza para mim neste momento (e eu assumiria muitos desenvolvedores). Deixar as aspas parece sujo.
BTSE
6
lazygit, o melhor nome de todos os tempos!
usar o seguinte comando
4
@btse eu sendo uma pessoa diplomática + é sexta-feira. Aqui está a função usando a sugestão @KaiCarver: function dirtygit() { git add . git commit -a -m "$*" git push }
OnklMaps 6/17
84

Acabei adicionando um alias ao meu .gitconfigarquivo:

[alias]
    cmp = "!f() { git add -A && git commit -m \"$@\" && git push; }; f"

Uso: git cmp "Long commit message goes here"

Adiciona todos os arquivos, depois usa o comentário para a mensagem de confirmação e a envia até a origem.

Eu acho que é uma solução melhor porque você tem controle sobre qual é a mensagem de confirmação.

O alias também pode ser definido na linha de comando; isso inclui o seu .gitconfig:

git config --global alias.cmp '!f() { git add -A && git commit -m "$@" && git push; }; f'
loucura
fonte
6
É exatamente isso que estou procurando! Funciona perfeitamente, obrigado! Não consegui encontrar uma referência completa de sintaxe ou uma lista detalhada de comandos. O que !f() { ... }; ffaz exatamente? Mais explicações dessa linha tornariam a resposta ainda melhor.
Dmitriy Gamolin
1
@DmitriyDemir Define a função fe depois a chama.
Oliver Oliver
Funciona muito bem. Eu adicionei git pullao início para que as mesclagens sejam reduzidas.
Burhan
1
@ Oliver Por que está entre aspas? Por que existe um ponto de exclamação? O f no final chama a função? O que é "$ @"?
Philip Rego
@PhilipRego errado Oliver: p
Oliver
53

Embora eu concorde com Wayne Werner sobre suas dúvidas, esta é tecnicamente uma opção:

git config alias.acp '! git commit -a -m "commit" && git push'

Que define um alias que é executado commite push. Use-o como git acp. Esteja ciente de que esses aliases "shell" são sempre executados a partir da raiz do seu repositório git.

Outra opção pode ser escrever um gancho pós-confirmação que faça o push.

Ah, a propósito, você realmente pode passar argumentos para aliases de shell. Se você deseja passar uma mensagem de confirmação personalizada, use:

git config alias.acp '! acp() { git commit -a -m "$1" && git push ; } ; acp'

(É claro que, agora, você terá que dar uma mensagem de commit: git acp "My message goes here!")

Tilman Vogel
fonte
@ wlz Eu apenas tentei e funciona bem. Observe que toda a cadeia está entre aspas simples. gitadicionadas automaticamente as escapes (marcadas com git config -e).
Tilman Vogel
Desculpe, você está certo :). Eu edito diretamente o arquivo .gitconfig. O "já escapou com \".
wlz
2
Por que essa não é a resposta aceita? Faz o que foi pedido. +1.
Lucid_dreamer # 9/17
1
No Windows, eu precisava escapar das aspas duplas em torno de US $ 1 para fazê-lo funcionar no PowerShell (usando ... \ "$ 1 \" ...)
DReimer
35

Eu acho que você pode entender mal o fluxo de trabalho para o qual o git foi projetado. (Para esclarecer / corrigir o que eu quis dizer no comentário, você não precisa do git add ., poiscommit -a geralmente serve para o mesmo objetivo - adicionar quaisquer alterações que ainda não tenham sido preparadas, se os arquivos já tiverem sido adicionados)

Normalmente, você fará algo assim:

# make some changes
$ git commit -a -m "Changed something"
# make some more changes
$ git commit -a -m "Changed something else"

lave, enxágue, repita, até concluir o recurso X, ou estar em um ponto de parada ou desejar que outras pessoas vejam o que você fez. Então você faz

$ git push

O Git não é SVN - mas parece que você está tentando usá-lo como tal. Você pode encontrar alguns dos recursos no final do artigo aqui de alguma utilidade.

Wayne Werner
fonte
6
+1 para a explicação sobre o fluxo de trabalho. No entanto, git add .e git commit -a não são a mesma coisa
Gabriele Petronella 25/10
5
Obrigado pela explicação, mas GIT não entrará em colapso se haverá um comando como este para quem sabe o que eles estão fazendo ...
Gediminas
4
@ Lucas: programadores experientes dirão que as pessoas que solicitam um comando de envio automático não sabem o que estão fazendo. Há uma razão para o check-in de código em três estágios (se você estiver usando ramificações de recursos, em quatro estágios).
slebetman
1
@lebetman: não expliquei corretamente. Com os aplicativos do facebook, todas as alterações devem ser implantadas no servidor ativo, mesmo para desenvolvimento. Então, nós configuramos ganchos de confirmação para fazer isso. Você faz uma alteração, confirma e vê a alteração no seu aplicativo. Com o git, preciso adicionar o estágio e pressionar para ver uma única alteração. Não parece um exagero?
SenG
1
Sim, mas você também não precisa se comprometer a testar seu código. Você deve escrever algum código, testá-lo e, em seguida, confirmar e enviar por push. O uso lendário do git local se compromete a fornecer algum tipo de funcionalidade de "desfazer" de vários arquivos. É usado muito mais na legenda do que na realidade, na minha experiência.
Joe Strout
35

Eu uso isso no meu .bash_profile

gitpush() {
    git add .
    git commit -m "$*"
    git push
}
alias gp=gitpush

Ele executa como

gp A really long commit message

Não se esqueça de executar source ~/.bash_profiledepois de salvar o alias.

Rajender Joshi
fonte
1
Eu realmente gosto disso. ... e, portanto, adotou-o em meu próprio ~ / .bash_profile;) obrigado .. +1
AO_
28

Você pode usar o script bash, definir alias para iniciar qualquer comando ou grupo de comandos

git commit -am "your message" && git push 
vuhung3990
fonte
2
Se você deseja fazer disso uma resposta, adicione mais comentários sobre como ele funciona. As respostas que são simplesmente um despejo de código geralmente não são bem recebidas. Veja Como responder .
Heretic Monkey
Eu acho que essa deve ser a resposta correta. Como ele responde à pergunta da maneira mais sucinta possível. Basta digitá-lo no terminal e ele funciona! Se você não deseja adicionar um alias, uma alternativa seria simplesmente criar uma expansão textExpander e acioná-la por meio de uma combinação de teclas.
eonist
19

Defina como um alias no bash:

$ alias lazygit="git add .; git commit -a -m '...'; git push;";

Chame-o:

$ lazygit

(Para tornar esse alias permanente, você deve incluí-lo no seu .bashrc ou .bash_profile)

Gavin
fonte
Você iria precisar dele acrescentar que alias para .bashrc ou .bash_profile para torná-lo permanente
Gavin
Eu acho que esta página pode ajudar a explicar: serverfault.com/questions/3743/…
Gavin
17

A solução mais simples seria:

git commit -a -m "commit" && git push

git add já está contido no parâmetro -a commit, mas se você quiser, pode conectar todos eles:

git add . && git commit -a -m "commit" && git push
michal.jakubeczy
fonte
10

No Linux / Mac, essa opção muito prática também deve funcionar

git commit -am "IssueNumberIAmWorkingOn --hit Enter key
> A detail here --Enter
> Another detail here --Enter
> Third line here" && git push --last Enter and it will be there

Se você estiver trabalhando em um nova ramificação criada localmente, altere ogit push peça comgit push -u origin branch_name

Se você deseja editar sua mensagem de confirmação no editor do sistema,

git commit -a && git push 

abrirá o editor e, após salvar a mensagem, ela também será enviada.

mcvkr
fonte
8

Você pode tentar gitu .

Pela primeira vez (o nó js deve ser instalado):

npm install -g git-upload

Depois disso:

gitu COMMIT_MSG

Para emitir esses três comandos ao mesmo tempo.

O bom é que você não precisa se preocupar quando reinstalar o sistema ou quando quiser fazer isso em computadores diferentes e nenhuma modificação de arquivo é necessária. Isso também funciona em plataformas diferentes (não apenas Linux e Mac, mas também no Windows sob prompt de comando como cmde powershell), apenas que você precisa instalar npme nodejsgitclaro).

Fritas
fonte
6

Se o arquivo já estiver sendo rastreado, você não precisará executar git add, basta escrevergit commit -am 'your message'

Se você não quiser escrever uma mensagem de confirmação, considere fazer algo como

git commit --allow-empty-message -am ''

Peter Foti
fonte
4

Resultado - Tente o seguinte: Comando simples de script um para git add, git commit e git push

Abra seu CMD no Windows e cole esta resposta

git commit -m "your message" . && git push origin master

Este exemplo, minha captura de tela de imagem: https://i.stack.imgur.com/2IZDe.jpg

Anang Hanafi
fonte
3

Conforme mencionado nesta resposta, você pode criar um alias do git e atribuir um conjunto de comandos para ele. Nesse caso, seria:

git config --global alias.add-com-push '!git add . && git commit -a -m "commit" && git push'

e use-o com

git add-com-push
cristianzamar
fonte
1
Isso não adiciona nada a nenhuma das respostas anteriores.
BanksySan
Me desculpe, você está certo. Acho que não percebi que a resposta de Tilman Vogel era a mesma que a minha .. Devo excluí-la?
Cristianzamar
3

Escreva um pequeno script chamado gitpush.sh com as linhas abaixo e adicione-o ao seu diretório ~.

echo $1
git add .
git commit -m "$1"
git push

Agora adicione um alias em ~ / .bashrc como abaixo:

alias gitpush='~/gitpush'

Agora, a partir de qualquer repositório git, escreva gitpush "message".

Vaneet Kataria
fonte
2

Eu uso um arquivo em lote:

@ECHO OFF
SET /p comment=Comment:
git add *
git commit -a -m "%comment%"
git push
Márcio Souza Júnior
fonte
probs seria mais fácil se você aceitasse os argumentos da linha de comando. eu simplesmente vou "lezygit MESSAGE" etc. é muito legal!
John Hon
1

Existem alguns problemas com os scripts acima:

shift "remove" o parâmetro $ 1, caso contrário, "push" irá lê-lo e "entendê-lo mal".

Minha dica:

git config --global alias.acpp '! git add -A && branchatu = "$ (simbolo-ref HEAD 2> / dev / null)" && branchatu = $ {branchatu ## refs / heads /} && git commit - m "$ 1" && shift && git pull -u origem $ branchatu && git push -u origem $ branchatu '

Rubens
fonte
1

Quando você quiser um comportamento semelhante ao svn do git commit, use isso nos aliases do git no seu .gitconfig

commit = "!f() { git commit \"$@\" && git push; };f"

Rik van der Heijden
fonte
1

Se você estiver usando casca de peixe (com base na resposta da btse):

Salve este arquivo em '~ / .config / fish / functions' como 'quickgit.fish'. Crie o diretório se ele não existir. '--git-dir = $ PWD / .git' Garante que executamos os comandos git no projeto git em que chamamos a função

function quickgit # This is the function name and command we call
    git --git-dir=$PWD/.git add . # Stage all unstaged files
    git --git-dir=$PWD/.git commit -a -m $argv # Commit files with the given argument as the commit message
    git --git-dir=$PWD/.git push # Push to remote
end

Reinicie o terminal, navegue para o projeto, faça alterações e agora você pode chamar 'quickgit "example message"'. As alterações serão agora adicionadas, confirmadas e enviadas por push :).

Também pode ser encontrado como um Gist aqui: https://gist.github.com/Abushawish/3440a6087c212bd67ce1e93f8d283a69

Abushawish
fonte
1

Já existem muitas boas soluções, mas aqui está uma solução que acho mais elegante para a maneira como quero trabalhar:

Eu coloquei um script no meu caminho chamado "git-put" que contém:

#!/bin/bash
git commit "$@" && git push -u

Isso me permite executar:

git put -am "minha mensagem de confirmação"

..para adicionar todos os arquivos, enviá-los e enviá-los.

(Também adicionei o "-u" porque, de qualquer maneira, gosto de fazer isso, mesmo que não esteja relacionado a esse problema. Ele garante que o ramo upstream esteja sempre configurado para puxar.)

Eu gosto dessa abordagem porque ela também permite usar o "git put" sem adicionar todos os arquivos (pule o "-a") ou com outras opções que eu queira passar para confirmar. Além disso, "put" é um pequeno portmanteau de "push" e "commit"

skiggety
fonte
1

Se você usa o VSCode, pode fazer o download desta extensão, que permitirá fazer isso em um simples atalho de teclado.

Alfred
fonte
1

Se você estiver usando um Mac:

  1. Inicie o Terminal Digite "cd ~ /" para ir para a sua pasta pessoal

  2. Digite "touch .bash_profile" para criar seu novo arquivo.

  3. Edite .bash_profile com seu editor favorito (ou você pode simplesmente digitar "open -e .bash_profile" para abri-lo no TextEdit).

  4. Copie e cole o abaixo no arquivo:

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

Depois disso, reinicie o seu terminal e simplesmente adicione, confirme e pressione um comando fácil, por exemplo:

lazygit "This is my commit message"
AdilOoze
fonte
1

Para usuários do MAC VSC, a melhor configuração é:

1) pressione 'shift + cmd + P' e digite:

Shell Command: install 'code' command in PATH

Pressione ENTER (isso instalará o comando de código para chegar facilmente ao bash_profile)

2) agora você pode executar: code ~/.bash_profilepara abrir o bash_profile vazio

3) insira uma nova função:

function lazygit() {
    git add .
    git commit -m "$*"
    git push
}

4) agora reinicie o VSC

5) faça uma alteração, salve-a e digite lazygit messagepara executar os três comandos simultaneamente

AGrush
fonte
1

Para os usuários do macOS:

  1. Abra o seu Terminal ou iTerm2 ou outro terminal que você usa.

  2. Mover para pasta de perfil de usuário com o comando ~/. É uma pasta padrão para o .bash_profilearquivo:

Exemplo de pasta do usuário

  1. Digite nano .bash_profileEste comando abrirá o .bash_profiledocumento (ou o criará, se ele ainda não existir), da maneira mais fácil de usar o editor de texto para o terminal - nano.

  2. Agora você pode fazer uma simples alteração no arquivo. Cole estas linhas de código para alterar o prompt do Terminal:

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

Edição de texto nano

  1. Agora salve suas alterações digitando ctrl + oe pressione Enter para salvar. Então saia nanodigitando ctrl + x.

  2. Agora precisamos ativar suas alterações. Digite source .bash_profile(ou . ~/.bash_profile) e observe sua alteração imediata.

  3. No iTerm2, Preferences/Profiles/General/Commanddefina para Login Shelle Send text at startpara source ~/.bash_profile. Portanto, você não precisa fazer isso manualmente após cada reinicialização do macOS. preferências do iTerm 2

Credenciais: https://natelandau.com/my-mac-osx-bash_profile

rusakovic
fonte
0

Eu fiz este script .sh para comando

#!/bin/sh
cd LOCALDIRECTORYNAME/  
git config --global user.email "YOURMAILADDRESS"
git config --global user.name "YOURUSERNAME"
git init
git status
git add -A && git commit -m "MASSAGEFORCOMMITS"
git push origin master
acs
fonte
0

Como a pergunta não especifica qual shell, eis a versão eshell com base nas respostas anteriores. Isso acontece no arquivo eshell alias, que pode estar em ~ / .emacs.d / eshell / alias. Adicionei a primeira parte z https://github.com/rupa/z/, que permite que você faça um cd rapidamente em um diretório , para que isso possa ser executado, independentemente do diretório atual.

alias census z cens; git add .; git commit -m "fast"; git push
בנימן הגלילי
fonte
0

Adicione ~/.bash_profilepara adicionar, confirmar e pressionar com um comando:

function g() { git commit -a -m "$*"; git push; }

Uso:

g your commit message
g your commit message 'message'

Não são necessárias aspas, embora você não possa usar ponto-e-vírgula ou parênteses em suas mensagens de confirmação (aspas simples são permitidas). Se você quiser alguma dessas opções, basta colocar aspas duplas na sua mensagem, por exemplo:

g "your commit message; (message)"

Para criar um comentário em sua mensagem, faça:

g "your commit message:
> your note"

Há também uma função para adicionar e confirmar de maneira semelhante:

function c() { git add --all; git commit -m "$*"; }

Funciona exatamente da mesma maneira que gfunciona e tem as mesmas restrições. Basta colocar cem seu lugar. Por exemplo

c your commit message

Você também pode adicionar um alias para enviar para o controle remoto:

alias p='git push'

Uso:

p

Isso equivale a 2 letras, ce pvocê usa enquanto trabalha com seu repositório git. Ou você pode usarg para fazer tudo com apenas uma letra.

Lista completa de aliases e funções: https://gist.github.com/matt360/0c5765d6f0579a5aa74641bc47ae50ac

Bolo de cenoura
fonte
0

Com base na lazygitresposta, a solução a seguir adiciona uma verificação do usuário para verificar as alterações antes de enviar por push. Ele reverterá os comandos se cancelado. E tudo isso acontecerá se e somente se houver alterações no repositório local.

### SAFER LAZY GIT
function lazygit() {
  git add .
  if git commit -a -m "$1"; then
    read -r -p "Are you sure you want to push these changes? [y/N]} " response
    case "$response" in
      [yY][eE][sS]|[yY])
        git push
        ;;
      *)
        git reset HEAD~1 --soft
        echo "Reverted changes."
        ;;
    esac
  fi
}
Matthew Cordaro
fonte
0

Isso é perfeito para agrupamento de comandos.

Comandos de agrupamento

{ Lista; } Colocar uma lista de comandos entre chaves faz com que a lista seja executada no contexto atual do shell. Nenhum subshell é criado. É necessário o ponto e vírgula (ou nova linha) a seguir.

legit(){ git add --all; git commit -m "$1"; git push origin master; }
legit 'your commit message here'
Gothburz
fonte
1
Isso não vai funcionar se comprometer mensagem tem espaços no meio
Rohit
0

Eu gosto de executar o seguinte:

git commit -am "message";git push
etoxina
fonte
Eu acho que o ;deve ser substituído por &&seu comando, pois o posterior executará o git pushcomando somente se não houver erro no (s) comando (s) anterior (es).
Tom
0

Achei esse yolo alias incrível mesmo enviar um comentário aleatório para o commit enquanto eu estava sendo preguiçoso. Funciona muito bem fora da caixa, então eu apenas faço git yoloe todas as minhas alterações são enviadas automaticamente.

jamescampbell
fonte