Git-現在のブランチショートカットをプッシュする


363

現在の追跡ブランチをオリジンにプッシュするようにGitに指示するショートカットはありますか?
注:デフォルトのプッシュ動作を変更できることはわかっていますが、デフォルトの動作を変更しないアドホックソリューションを探しています。

たとえば、feature/123-sandbox-tests私が使用しているブランチにいるとします

git push origin feature/123-sandbox-tests

これは退屈です。次のようなショートカットを探しています

git push origin current

ここでgitは電流がであることを知っていfeature/123-sandbox-testsます。


編集:バージョン2.0以降、gitのデフォルトの動作がより直感的な動作に変更されました。これは私が達成したかった動作です。詳細については、このSOの質問を参照してください。

編集2ceztkoの答えは、設定に関係なく現在のブランチをプッシュできるため、最良の答えです。

回答:


702

git pushドキュメントによると:

git push origin HEAD
    A handy way to push the current branch to the same name on the remote.

だから私はあなたが必要とするものだと思いますgit push origin HEAD。またgit push -u origin HEAD、まだオリジンにプッシュしていない場合は、ローカルブランチにアップストリーム追跡情報を設定すると便利です。


11
マシンごとに設定が異なる可能性があるため、push.defaultをsimpleまたはcurrentに設定するよりも、これを優先します。git push現在のブランチのみをプッシュすることに慣れているかもしれませんが、他のマシンでは、一致するすべてのブランチを誤ってプッシュする可能性があります。
wisbucky 2014

1
@wisbuckyには、を含むいくつかのエイリアスcoがあるため~/.gitconfig、そのVMにファイルがなくても、プルダウンしてコードをチェックアウトしようとすると、すぐにわかります。これにより、プッシュのデフォルトをに変更することをかなり安全に感じることができますupstream
デイモン

9
これは@、の有効なエイリアスとして文書化されているだけでは機能しないのは興味深いことですHEAD。(例git push -u origin @
void.pointer 2015年

197

次のコマンドを使用して、現在のブランチにプッシュするようにgit設定できます

git config --global push.default current

してください

git push 

これにより、コードが現在のブランチにプッシュされます。


push = refs/heads/current:refs/for/master/current.git / configの「リモート」セクションに追加することは意味がありますか?つまり、「現在」はここで特別な言葉ですか?それとも「current」というブランチを探しますか?
David Doria

6
@DavidDoria 'current'は、ここで指定されたブランチではありません。
Mahesh、

git push -u origin feature_branch_nameアップストリーム/トラッキングを設定することをお勧めします!少なくともリモートリポジトリを使用する場合。
Flo

40

ブランチを指定せずに「git push」のデフォルトの動作で同様の質問を確認する必要があります

基本的に、デフォルトの動作を設定して、実行中の現在のブランチをプッシュする方法を説明しますgit push。おそらくあなたが必要とするものは:

git config --global push.default current

その他のオプション:

  • なし:何もプッシュしません
  • matching:すべての一致するブランチをプッシュします
  • アップストリーム / 追跡:現在のブランチを追跡しているものにプッシュします
  • current:現在のブランチをプッシュします

11

私は.bashrc設定でそのようなエイリアスを使用しています

alias gpb='git push origin `git rev-parse --abbrev-ref HEAD`'

コマンド$gpbでは、現在のブランチ名を取得して、オリジンにプッシュします。

これが私の他のエイリアスです:

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'

8

それが価値があるもののために、究極のショートカット:

.bash_profileにはがalias push="git push origin HEAD"あるので、タイプするたびpushに、現在のブランチにプッシュしていることがわかります。


6

git 1.7.xを使用している場合は、次のコマンドを実行してリモート追跡ブランチを設定できます。

git branch --set-upstream feature/123-sandbox-tests origin/feature/123-sandbox-tests

次に、を使用git pushしてすべての変更をプッシュできます。より完全な回答については、ここで同様の質問に対する受け入れられた回答を参照してください

pushコマンドで現在のブランチをプッシュするだけの場合は、プッシュ動作を上流に変更できます。

git config --global push.default upstream

おかげで、この場合、すべての追跡ブランチは元にプッシュされませんか?
Elad、

私は答えを変更しました。リンクを参照してください。答えはそこでより完全です。
Faruk Sahin

繰り返しますが、問題は、追跡しているすべてのブランチがそのようにプッシュされていることです。私が質問で書いたように、ブランチはそもそも追跡されたブランチなので、提案されたように上流ブランチを設定することは冗長だと思います。それとも私は間違っていますか?
Elad、

次に、git pushの動作を変更して、現在のブランチのみをプッシュするようにgitを構成できます。git config --global push.default upstream現在のブランチのみをプッシュするようにプッシュ動作を設定します。
Faruk Sahin、

5

最も簡単な方法:git push -u origin feature/123-sandbox-tests1回実行します。これにより、慣れ親しんだ方法でブランチがプッシュされ、ローカル構成でアップストリーム追跡情報も設定されます。その後、git push追跡されたブランチを上流のリモートにプッシュすることができます。

またbranch.<branch name>.merge、リモートブランチ名(この場合はローカル名と同じ)に設定し、オプションで、branch.<branch name>.remoteプッシュ先のリモートの名前(デフォルトはorigin)に設定することで、configでこれを行うこともできます。設定を確認すると、おそらくこれらのセットの1つが既に存在するためmaster、その例に従うことができます。

最後に、 push.default設定。デフォルトは「一致」です。これは、望ましくない予期しない結果になる可能性があります。私が知っているほとんどの人は、「上流」の方がより直感的であり、現在のブランチのみをプッシュします。

これらの各設定の詳細については、git-configのmanページをご覧ください

考え直しでは、再読み込みあなたの質問に、私はあなたがこのすべてを知っていると思います。あなたが実際に探しているものは存在しないと思います。(テストされていない)のようなbash関数はどうですか:

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}

1

ceztkoの回答を利用して、私はこの小さなヘルパー関数を作成して、私の人生を楽にしています。

function gpu()
{
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then
        git push origin HEAD
    else
        git push -u origin HEAD
    fi
}

現在のブランチをオリジンにプッシュし、まだセットアップされていない場合はリモートトラッキングブランチも設定します。

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