git adicionar, commit e empurrar comandos em um?

Há alguma maneira de usar estes três comandos num só?

git add .
git commit -a -m "commit" (do not need commit message either)
git push
Às vezes só mudo uma letra, acolchoado CSS ou algo assim. Ainda assim, eu tenho que escrever todos os três comandos para empurrar as mudanças. Há muitos projetos onde eu sou apenas um empurrador, então este comando seria incrível!

 155
git
Author: alex, 2013-10-25

21 answers

A construir a partir da resposta de @Gavin:

Fazer do lazygit uma função em vez de um pseudónimo permite-lhe passar-lhe um argumento. Acrescentei o seguinte ao meu .bashrc (or .bash_profile if Mac):
function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

Isto permite - lhe fornecer uma mensagem de commit, como

lazygit "My commit msg"
É claro que se poderia reforçar ainda mais esta situação aceitando ainda mais argumentos, como por exemplo o local remoto para onde empurrar ou o ramo.
 171
Author: btse, 2014-04-27 21:06:23

Acabei por adicionar um nome falso ao meu ficheiro .gitconfig:

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

: git cmp "Long commit message goes here"

Adiciona todos os ficheiros, depois usa o comentário para a mensagem de commit e empurra-a para a origem.

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

A alcunha também pode ser definida a partir da linha de comandos, o que a adiciona à sua .gitconfig:

git config --global alias.cmp '!f() { git add -A && git commit -m "$@" && git push; }; f'
 55
Author: madcapacity, 2017-08-10 07:39:07
Embora concorde com o Wayne Werner nas suas dúvidas, esta é tecnicamente uma opção.
git config alias.acp '! git commit -a -m "commit" && git push'

Que define uma alcunha que corre commit e push. Use-o como git acp. Por favor, esteja ciente de que esses pseudônimos "shell" são sempre executados a partir da raiz do seu repositório git.

Outra opção pode ser escrever um gancho pós-commit que faça o push.
 36
Author: Tilman Vogel, 2013-10-25 17:06:37
Acho que pode interpretar mal o fluxo de trabalho para o qual o git foi concebido. (Para esclarecer/corrigir o que eu quis dizer no comentário, você não precisa do {[[2]}, uma vez que commit -a normalmente serve o mesmo propósito - adicionando quaisquer alterações que ainda não foram encenadas, se os arquivos já foram adicionados) Normalmente vais fazer algo assim:
# make some changes
$ git commit -a -m "Changed something"
# make some more changes
$ git commit -a -m "Changed something else"
Lave, lave, repita, até terminar a funcionalidade X, ou esteja num ponto de paragem, ou só queira que as outras pessoas vejam o que tem terminar. Então você faz
$ git push

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

 29
Author: Wayne Werner, 2013-10-25 21:19:15
Eu uso isto na minha .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 correr depois de salvar o nome falso.
 20
Author: Rajender Joshi, 2018-05-10 04:59:40

Também conhecido por in bash:

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

Chama-lhe:

$ lazygit
[[3]} (para tornar este pseudónimo permanente, teria de O incluir no seu .bashrc or .bash_profile)
 16
Author: Gavin, 2014-03-22 02:47:21

Pode usar o programa bash, definir o nome alternativo para lançar qualquer comando ou grupo de comandos

git commit -am "your message" && git push 
 16
Author: vuhung3990, 2017-06-07 08:45:33

Podes tentar gitu .

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

npm install -g git-upload

Depois disso:

gitu COMMIT_MSG
Para emitir esses três comandos ao mesmo tempo.

A coisa boa é que você não tem que se preocupar quando você reinstalar o seu sistema ou quando você quer fazer isso em computadores diferentes e nenhuma modificação de arquivo é necessária. Isto também Funciona em diferentes plataformas (Não apenas Linux e Mac, mas também Windows sob a linha de comandos como cmd e powershell apenas que você tem que instalar npm e nodejs (git claro.

 7
Author: Hellow Hi, 2017-09-27 16:52:45

A solução mais simples seria:

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

git add já está contido em-um parâmetro de commit, mas se quiser pode ligá-los a todos:

git add . && git commit -a -m "commit" && git push
 7
Author: jabko87, 2018-08-09 11:40:08

Se o ficheiro já estiver a ser seguido, então não precisa de correr {[[0]}, pode simplesmente escrever git commit -am 'your message'

Se você não quiser escrever uma mensagem de commit você pode considerar fazer algo como

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

 5
Author: Peter Foti, 2013-10-26 23:48:41

Como mencionado em esta resposta , você pode criar um git alias e atribuir um conjunto de comandos para ele. Neste caso, seria:

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

E usa-o com

git add-com-push
 3
Author: cristianzamar, 2017-06-07 08:45:22

Se quiser editar melhor a sua mensagem de commit, quero dizer adicionar mais do que uma linha, etc... então

git commit -a && git push 

Irá abrir o editor e assim que gravar a mensagem, irá também carregá-la.

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

git commit -am "IssueNumberIAmWorkingOn --hit Enter for a new line
> A detail here --hit Enter
> Another detail here --hit Enter
> Third line here" && git push --hit Enter and it will be there
 3
Author: mCeviker, 2018-05-25 17:08:34

Uso um ficheiro em lote:

@ECHO OFF
SET /p comment=Comment:
git add *
git commit -a -m "%comment%"
git push
 2
Author: Márcio Souza Júnior, 2016-03-31 15:16:10

Existem alguns problemas com os scripts acima:

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

A minha dica:

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

 1
Author: Rubens, 2015-12-06 14:41:59

Quando quiser um comportamento semelhante ao svn do git commit, use isto nos seus pseudónimos git no seu .gitconfig

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

 1
Author: Rik van der Heijden, 2016-08-16 11:30:36

Eu fiz isto. Sh script para o 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
 0
Author: acs, 2017-03-31 12:32:30

Uma vez que a pergunta não especifica qual shell, aqui está a versão resumida baseada nas respostas anteriores. Isto vai para o arquivo eshell alias, que pode estar em~/.emacs.d/eshell / alias acrescentei a primeira parte z https://github.com/rupa/z/ que lhe permite cd rapidamente para uma pasta, para que esta possa ser executada independentemente da sua pasta actual.

alias census z cens; git add .; git commit -m "fast"; git push
 0
Author: בנימן הגלילי, 2017-08-03 09:47:26

Adicionar em ~/.bash_profile para adicionar, enviar e empurrar com um comando colocar:

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

Utilização:

g your commit message
g your commit message 'message'

Não são necessárias aspas, embora não possa usar pontos-e-vírgula ou parêntesis nas suas mensagens de commit (são permitidas aspas simples). Se você quiser qualquer um destes basta colocar aspas duplas em sua mensagem, por exemplo:

g "your commit message; (message)"

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

g "your commit message:
> your note"

Também há uma função para adicionar e cometer em um semelhante way:

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

Funciona exactamente da mesma maneira que g funciona e tem as mesmas restrições. Põe antes {[10] }. Por exemplo

c your commit message

Também pode adicionar um pseudónimo por empurrar para o remoto:

alias p='git push'

Utilização:

p

Isso equivale a 2 Letras, c e p que usa enquanto trabalha com o seu repositório de git. Ou você pode usar g em vez de fazer tudo com apenas uma letra.

Lista completa dos pseudónimos e funcao: https://gist.github.com/matt360/0c5765d6f0579a5aa74641bc47ae50ac

 0
Author: Carrot Cake, 2018-02-05 16:07:12

Edifício ao largo da lazygit resposta, a seguinte solução adiciona uma verificação do Usuário para verificar as alterações antes de empurrar. Ele irá reverter os comandos se cancelado. E tudo isso acontecerá se e somente se houver mudanças no repo 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
}
 0
Author: Matthew Cordaro, 2018-02-10 23:46:58

Se estiver a utilizar concha de peixe (a partir da resposta da btse):

Guarde este ficheiro em'~/.configuração/fish / functions ' as ' quickgit.fish'. Crie o diretório se ele não existir. '--git-dir=$PWD/.o git ' garante que executamos os comandos git contra o projecto git onde 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

Reiniciar o terminal, navegar para projectar, fazer alterações e agora pode chamar 'mensagem de exemplo'ao ' quickgit'. As mudanças serão agora adicionadas, comprometidas e empurradas :).

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

 0
Author: Abushawish, 2018-05-24 00:37:28

Isto é perfeito para o agrupamento de comandos.

Agrupar Comandos

{ lista;} A colocação de uma lista de comandos entre chavetas faz com que a lista seja executada no contexto da linha de comandos actual. Não foi criada nenhuma subtileza. É necessária a lista ponto-e-vírgula (Ou Linha Nova) seguinte.

legit(){ git add --all; git commit -m "$1"; git push origin master; }
legit 'your commit message here'
 0
Author: Gothburz, 2018-07-19 21:32:04