git add、commit、pushコマンドを1つに?


220

これら3つのコマンドを1つで使用する方法はありますか?

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

たまに、1文字だけ、CSSパディングなどを変更しています。それでも、変更をプッシュするには、3つのコマンドすべてを記述する必要があります。プッシャーが1つしかないプロジェクトがたくさんあるので、このコマンドはすばらしいでしょう。


10
シェルスクリプトを書いてみましたか?
ポール


私のコードには多くの変更があります。CSSのパディングや1文字などを変更するだけです。コミットメッセージとこれらすべてのコマンドは、多くの作業を追加します。シェルスクリプトを試していません。どうすればできますか?ありがとう!
Gediminas 2013年

2
「(コミットメッセージも必要ありません)」images.wikia.com/dragonball/images/a/a7/Facepalm_227785.jpg
Ajedi32

2
変更のすべてのインスタンスに対してコミットを行っている場合、それは間違っています。機能が終了したとき、またはバグが解決されたときにコマンドを実行します(これは1つの変更である可能性があります)
マーク

回答:


234

@Gavinの答えからの構築:

lazygitをエイリアスではなく関数にすることで、引数を渡すことができます。以下を.bashrc(またはMacの場合は.bash_profile)に追加しました:

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

これにより、次のようなコミットメッセージを提供できます。

lazygit "My commit msg"

もちろん、プッシュするリモートの場所やブランチなど、さらに多くの引数を受け入れることで、これをさらに強化できます。


10
再起動は必要ありません。「source .bashrc」を実行してください
Sambit Tripathy

25
使用できる$*代わりの$1引用符を入力して保存するには:lazygit My commit msg
甲斐カーバー

16
@カイカーバーニースは思ったが、個人的には好きではない。これにより、複数の引数を使用できなくなり、スペースが引用符で囲まれた単一の文字列引数の通常の規則に反します。これは、現時点で私にとって2番目の性質です(多くの開発者を想定しています)。引用符を省くのは汚い感じです。
btse 2015年

6
lazygit、史上最高の名前!
user1447414

4
@btse私は外交官であること+それは金曜日です。@KaiCarverの提案を使用した関数は次の function dirtygit() { git add . git commit -a -m "$*" git push }
とおりです。– OnklMaps

84

.gitconfigファイルにエイリアスを追加してしまいました:

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

使用法: git cmp "Long commit message goes here"

すべてのファイルを追加し、コミットメッセージのコメントを使用して、それを元の場所にプッシュします。

あなたはコミットメッセージが何であるかを制御できるので、私はそれがより良い解決策だと思います。

エイリアスはコマンドラインからも定義できます.gitconfig。これにより、エイリアスが次のように追加されます。

git config --global alias.cmp '!f() { git add -A && git commit -m "$@" && git push; }; f'

6
それがまさに私が探していたものです!ありがとうございます!完全な構文リファレンスやコマンドの詳細なリストは見つかりませんでした。!f() { ... }; f正確には何をしますか?その行のより多くの説明は答えをさらに良くするでしょう。
Dmitriy Gamolin 2018年

1
@DmitriyDemir関数を定義してfから呼び出します。
オリバー

本当にうまくいきます。git pullマージを減らすために、最初に追加しました。
Burhan

1
@Oliverなぜ引用符で囲まれているのですか?感嘆符があるのはなぜですか?最後のfは関数を呼び出しますか?「$ @」とは何ですか?
フィリップレゴ

@PhilipRego間違ったOliver:p
Oliver

53

私は彼の疑問についてウェインワーナーに同意しますが、これは技術的にはオプションです。

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

別名を定義することが実行commitしてpush。として使用してくださいgit acp。このような「シェル」エイリアスは常にgitリポジトリのルートから実行されることに注意してください。

別のオプションは、プッシュを実行するコミット後フックを作成することです。

ああ、ところで、実際にシェルエイリアスに引数を渡すことができます。カスタムコミットメッセージを渡す場合は、代わりに次を使用します。

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

(もちろん、今、あなたがコミットメッセージを与える必要があります。git acp "My message goes here!"


@wlz私はそれを試してみましたが、うまくいきます。文字列全体が単一引用符で囲まれていることに注意してください。gitエスケープを自動的に追加しました(でチェックgit config -e)。
Tilman Vogel 14

すみません、あなたは正しいです:)。.gitconfigファイルを直接編集します。"はすでに\でエスケープされています。
wlz

2
なぜこれは受け入れられた答えではないのですか?求められたことを実行します。+1。
lucid_dreamer

1
Windowsでは、PowerShellから機能させるために$ 1の前後の二重引用符をエスケープする必要がありました(... \ "$ 1 \" ...を使用)
DReimer

35

gitが設計されたワークフローを誤解しているかもしれません。(私がコメントで意味したことを明確にする/修正するためgit add .に、commit -a通常は同じ目的を果たします-ファイルがすでに追加されている場合は、まだステージングされていない変更を追加するため、は必要ありません)

通常は、次のようにします。

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

機能Xが完了するまで、または停止点に到達するまで、または他の人にあなたが何をしたかを見てもらいたいまで、洗浄、すすぎ、繰り返します。その後、あなたはします

$ git push

GitはSVNではありませんが、それをそのまま使用しようとしているようです。あなたは記事の最後にいくつかのリソースを見つけるかもしれないここにいくつかの使用であると。


6
ワークフローの説明については+1。ただしgit add .git commit -a 同じものではありません
ガブリエレPetronella

5
説明してくれてありがとう。でも、このようなコマンドがあれば、彼らが何をしているのかを知っている人たちのためにGITが崩壊することはありません...
Gediminas

4
@Lucas:経験豊富なプログラマーは、自動commit-pushコマンドを要求する人は自分が何をしているのか分からないと言うでしょう。3段階のコードチェックインには理由があります(機能ブランチを使用している場合は、4段階)。
slebetman 2013年

1
@slebetman:私はそれを正しく説明しませんでした。Facebookアプリでは、すべての変更を開発のためにライブサーバーにデプロイする必要があります。そのため、それを行うためのセットアップコミットフックがあります。変更を加えてコミットし、アプリで変更を確認します。gitでは、追加してステージングしてからプッシュし、1つの変更を確認する必要があります。やりすぎじゃないですか。
SenG 2014年

1
はい。ただし、コードをテストするためにコミットする必要もありません。あなたは、いくつかのコードを記述し、それをテストし、必要があり、その後にコミットしてプッシュ。ある種のマルチファイルの「元に戻す」機能を提供するためのローカルgitコミットの伝説的な使用は、私の経験では、実際よりも伝説ではるかに多く使用されています。
ジョーストラウト2016年

35

私はこれを私の.bash_profileで使用します

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

それはのように実行されます

gp A really long commit message

source ~/.bash_profileエイリアスを保存した後に実行することを忘れないでください。


1
私は本当にこれが好きです。...したがって、それを自分の〜/ .bash_profileに採用しました;)おかげで.. +1
AO_

28

bashスクリプトを使用し、エイリアスを設定して、任意のコマンドまたはコマンドのグループを起動できます

git commit -am "your message" && git push 

2
これを答えにしたい場合は、それがどのように機能するかについてさらにコメントを追加してください。単にコードダンプである回答は、一般的にはあまり受け入れられません。回答方法を参照してください。
異端者の猿

これが正解だと思います。それが質問にできるだけ簡潔に答えるように。ターミナルに入力するだけで動作します!エイリアスを追加したくない場合は、代わりに、textExpanderを作成し、キーコンボでトリガーします。
eonist 16

19

bashでエイリアスとして設定します。

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

あれを呼べ:

$ lazygit

(このエイリアスを永続的にするには、.bashrcまたは.bash_profileに含める必要があります)


エイリアスを.bashrcまたは.bash_profileに追加して永続的にする必要があります
Gavin

:私は、このページを説明するのに役立つことができると思いserverfault.com/questions/3743/...
ギャビン

17

最も簡単な解決策は次のとおりです。

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

git add はすでにコミットの-aパラメータに含まれていますが、必要に応じてすべてを接続できます。

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

10

Linux / Macでは、この非常に実用的なオプションも機能するはずです。

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

ローカルに作成された新しいブランチで作業している場合は、git push部分をgit push -u origin branch_name

システムエディターでコミットメッセージを編集する場合

git commit -a && git push 

エディターが開き、メッセージを保存するとプッシュも実行されます。


8

あなたはgituを試すことができますます。

初めて(ノードjsをインストールする必要があります):

npm install -g git-upload

その後:

gitu COMMIT_MSG

これらの3つのコマンドを一度に発行します。

良いことは、システムを再インストールするとき、または別のコンピューターでこれを実行するときに心配する必要がなく、ファイルの変更が必要ないことです。 また、これは、異なるプラットフォーム上の作業(のようなプロンプトコマンドの下だけでなく、Linux、およびMacはなく、また、Windows cmdおよびpowershellインストールする必要がちょうどあること)npmnodejsgitもちろん)。


6

ファイルがすでに追跡されている場合は、実行する必要はありません git add単にgit commit -am 'your message'

コミットメッセージを書きたくない場合は、次のようなことを検討するかもしれません

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



3

この回答で述べたように、gitエイリアスを作成し、それに一連のコマンドを割り当てることができます。この場合は、次のようになります。

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

そしてそれを使って

git add-com-push

1
これは、以前のどの回答にも何も追加しません。
BanksySan 2015年

すみません、あなたは正しいです。ティルマンフォーゲルの答えが私の答えと同じであることに気づかなかったと思います。削除しますか?
cristianzamar 2015年

3

以下の行でgitpush.shという名前の小さなスクリプトを記述し、それを〜ディレクトリに追加します。

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

以下のように〜/ .bashrcにエイリアスを追加します。

alias gitpush='~/gitpush'

ここで、任意のgitリポジトリからgitpush "message"と書き込みます。


2

私はバッチファイルを使用します:

@ECHO OFF
SET /p comment=Comment:
git add *
git commit -a -m "%comment%"
git push

コマンドラインからargsで受け入れた場合、確率はより簡単になります。「lezygit MESSAGE」などに行くだけでかっこいい!
ジョンホン

1

上記のスクリプトにはいくつか問題があります。

shiftは、パラメーター$ 1を「削除」します。それ以外の場合、「push」はそれを読み取り、「誤解」します。

私のヒント:

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 push -u origin $ branchatu '



1

フィッシュシェルを使用している場合(btseの回答から構築):

このファイルを「〜/ .config / fish / functions」内に「quickgit.fish」として保存します。ディレクトリが存在しない場合は作成します。'--git-dir = $ PWD / .git'関数を呼び出したgitプロジェクトに対してgitコマンドを確実に実行します

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

ターミナルを再起動し、プロジェクトに移動して変更を加えると、「quickgit "example message"」を呼び出すことができます。変更が追加され、コミットされ、プッシュされます:)。

ここで要点としても見つけることができます:https : //gist.github.com/Abushawish/3440a6087c212bd67ce1e93f8d283a69


1

良い解決策はすでにたくさんありますが、ここでは私が働きたい方法に対してよりエレガントだと思う解決策を示します。

私のパスに「git-put」というスクリプトを置きます。

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

それは私が走ることを可能にします:

git put -am「私のコミットメッセージ」

..すべてのファイルを追加してコミットし、プッシュする。

(私は "-u"も追加しました。これは、この問題に関連していませんが、とにかくこれを実行するのが好きだからです。これにより、上流ブランチが常にプル用にセットアップされることが保証されます。)

このアプローチが好きなのは、すべてのファイルを追加せずに(「-a」をスキップして)「git put」を使用したり、コミットに渡したい他のオプションを使用したりできるためです。また、「put」は「push」と「commit」の短いportmanteauです。


1

VSCodeを使用している場合は、この拡張機能をダウンロードして、1つの簡単なキーボードショートカットで実行できます。


1

Macを使用している場合:

  1. ターミナルを起動し、「cd〜/」と入力してホームフォルダに移動します。

  2. 「touch .bash_profile」と入力して、新しいファイルを作成します。

  3. お好みのエディターで.bash_profileを編集します(または、「open -e .bash_profile」と入力して、TextEditで開きます)。

  4. 以下をコピーしてファイルに貼り付けます。

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

この後、ターミナルを再起動して、1つの簡単なコマンドを追加、コミット、プッシュします。例:

lazygit "This is my commit message"

1

MAC VSCユーザーの場合、最適な設定は次のとおりです。

1) 'shift + cmd + P'を押して次を入力:

Shell Command: install 'code' command in PATH

Enterキーを押します(これにより、bash_profileに簡単にアクセスするためのコードコマンドがインストールされます)

2)これで実行できます:code ~/.bash_profile空のbash_profileを開く

3)そこに新しい関数を入力します。

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

4)VSCを再起動します

5)変更を加えて保存しlazygit message、3つのコマンドを同時に実行するように入力します


1

macOSユーザーの場合:

  1. ターミナルiTerm2、または使用している別のターミナルを開きます。

  2. コマンドでユーザープロファイルフォルダに移動します~/。これは、.bash_profileファイルのデフォルトのフォルダーです。

ユーザーフォルダーの例

  1. 入力nano .bash_profileこのコマンドが開きます.bash_profile、端末のためのテキストエディタを使用するのが最も簡単にドキュメントを(またはそれが存在しない場合は作成します) - nano

  2. これで、ファイルに簡単な変更を加えることができます。次のコード行を貼り付けて、ターミナルプロンプトを変更します。

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

ナノテキスト編集

  1. 入力して変更を保存し、Enterキーを押しctrl + oて保存します。次にnano、と入力して終了しますctrl + x

  2. 次に、変更をアクティブ化する必要があります。入力source .bash_profile(または. ~/.bash_profile)して、プロンプトの変更を確認します。

  3. iTerm2でおよびにPreferences/Profiles/General/Command設定します。そのため、macOSを再起動するたびに手動で作成する必要はありません。 Login ShellSend text at startsource ~/.bash_profileiTerm 2の設定

資格情報:https : //natelandau.com/my-mac-osx-bash_profile


0

コマンド用にこの.shスクリプトを実行しました

#!/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

質問ではどのシェルを指定していないので、これは以前の回答に基づいたeshellバージョンです。これは、〜/ .emacs.d / eshell / aliasにある可能性があるeshellエイリアスファイルに入ります。最初の部分を追加しましたz https://github.com/rupa/z/ これにより、ディレクトリにすばやくcdできます、これは現在のディレクトリが何であっても実行できるようにするためです。

alias census z cens; git add .; git commit -m "fast"; git push

0

~/.bash_profile1つのコマンドputで追加、コミット、プッシュするためのアドイン:

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

使用法:

g your commit message
g your commit message 'message'

コミットメッセージでセミコロンや括弧を使用することはできませんが、引用符は必要ありません(単一引用符を使用できます)。これらのいずれかが必要な場合は、メッセージに二重引用符を入れてください。例:

g "your commit message; (message)"

メッセージにコメントを作成するには:

g "your commit message:
> your note"

同様の方法で追加およびコミットするための関数もあります。

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

そのg機能とまったく同じように機能し、同じ制約があります。c代わりに置くだけです。例えば

c your commit message

リモートにプッシュするためのエイリアスを追加することもできます。

alias p='git push'

使用法:

p

これは2文字にcなりp、gitリポジトリでの作業中に使用します。または使用できますg代わりにをして、1文字だけですべてを実行。

エイリアスと関数の完全なリスト:https : //gist.github.com/matt360/0c5765d6f0579a5aa74641bc47ae50ac


0

オフ建物lazygitの答えを、以下のソリューションをプッシュする前に変更を確認するためにユーザチェックを追加します。キャンセルされた場合、コマンドを元に戻します。そして、ローカルリポジトリに変更があった場合にのみ、すべてのことが起こります。

### 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

これはコマンドのグループ化に最適です。

グループ化コマンド

{リスト; 中括弧の間にコマンドのリストを配置すると、そのリストは現在のシェルコンテキストで実行されます。サブシェルは作成されません。セミコロン(または改行)の次のリストが必要です。

legit(){ git add --all; git commit -m "$1"; git push origin master; }
legit 'your commit message here'

1
コミットメッセージの間にスペースがある場合、これは機能しません
Rohit

0

私は以下を実行するのが好きです:

git commit -am "message";git push

前のコマンドにエラーがない場合にのみ後者がコマンドを実行するため、コマンドで;&&に置き換える必要があると思いますgit push
トム

0

この yoloエイリアスは、私が怠けている間にランダムなコメントをコミットに送信することすらすごいことを発見しました。それは箱から出して本当にうまく機能するので、私はそうするだけでgit yolo、すべての変更が自動的にプッシュされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.