1456

次のコマンドを使用して、リモート ブランチにプッシュします。

git push origin sandbox

私が言うなら

git push origin

それは私の他のブランチにも変更をプッシュしますか、それとも現在のブランチのみを更新しますか? masterproductionおよびの 3 つのブランチがありsandboxます。

ドキュメントはこれgit pushについてあまり明確ではないので、これを明確にしたいと思います。

git push次のコマンドが正確に更新するブランチとリモートはどれですか?

git push 
git push origin

origin上はリモコンです。

git push [remote] [branch]そのブランチのみをリモートにプッシュすることを理解しています。

4

12 に答える 12

1700

git config で push.default を設定することにより、デフォルトの動作を制御できます。git-config(1) ドキュメントから:

push.default

コマンド ラインで refspec が指定されておらず、リモートで refspec が構成されておらず、コマンド ラインで指定されたオプションのいずれによっても refspec が暗示されていない場合に、git push が実行するアクションを定義します。可能な値は次のとおりです。

  • nothing: 何も押さないでください

  • matching: (Git 2.0 より前のデフォルト) 一致するすべてのブランチをプッシュします

    両端で同じ名前を持つすべてのブランチは、一致していると見なされます。

  • upstream: 現在のブランチを上流のブランチにプッシュします (上流trackingの非推奨の同義語です)

  • current: 現在のブランチを同じ名前のブランチにプッシュします

  • simple: (Git 1.7.11 の新機能、Git 2.0 以降のデフォルト) アップストリームと同様ですが、アップストリーム ブランチの名前がローカルのものと異なる場合はプッシュを拒否します

    これは最も安全なオプションであり、初心者に適しています。

simple、current、upstream の各モードは、他のブランチをプッシュする準備ができていない場合でも、作業を終えた後に 1 つのブランチをプッシュしたい人向けです。

コマンドラインの例:

現在の構成を表示するには:

git config --global push.default

新しい構成を設定するには:

git config --global push.default current
于 2009-06-04T03:02:57.790 に答える
219

push.defaultを使用してgitのデフォルトの動作を設定できます

git config push.default current

または、多くのリポジトリがあり、すべてに同じものが必要な場合

git config --global push.default current

この設定の現在は、デフォルトではgitpushを実行したときにのみ現在のブランチをプッシュすることを意味します

その他のオプションは次のとおりです。

  • 何も:何もプッシュしないでください
  • 一致:一致するすべてのブランチをプッシュします(デフォルト)
  • 追跡:現在のブランチを追跡しているものにプッシュします
  • current:現在のブランチをプッシュします

更新-これを行うための新しい方法

Git 1.7.11以降、次のことを行います。

git config --global push.default simple

これは、現在と同じように機能する新しい設定であり、噂によると、デフォルトでv2.0からgitになります。

于 2011-10-06T10:45:24.390 に答える
207

git push originoriginAs forで一致するリモートブランチを持つローカルブランチのすべての変更をプッシュしますgit push

のように動作git push <remote>し、 where<remote>は現在のブランチのリモート (現在のブランチにリモートが構成されていない場合はオリジン) です。

マニュアルページの例のセクションからgit-push

于 2009-06-04T03:16:47.933 に答える
52

次のように、コードをブランチにコミットし、github にプッシュしました。

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git push origin SimonLowMemoryExperiments
于 2011-11-06T10:05:54.280 に答える
27

Git Pushに関する非常に便利で役立つ情報を以下に示します。 Git Push : ちょっとしたヒント

git push の最も一般的な用途は、ローカルの変更をパブリックのアップストリーム リポジトリにプッシュすることです。アップストリームが "origin" という名前のリモート (リポジトリがクローンの場合のデフォルトのリモート名) であり、更新対象のブランチが "master" (デフォルトのブランチ名) であると仮定すると、これは次のように行われます。git push origin master

git push originすべてのローカル ブランチから、オリジン リモートの一致するブランチに変更をプッシュします。

git push origin master変更をローカル マスター ブランチからリモート マスター ブランチにプッシュします。

git push origin master:stagingローカル マスター ブランチからリモート ステージング ブランチ (存在する場合) に変更をプッシュします。

于 2012-08-09T08:02:40.833 に答える
19

(2012 年 3 月)
注意: デフォルトの " matching" ポリシーはすぐに変更される可能性があります
(git1.7.10 以降の場合もあります)
:

議論してください: 何をプッシュするかを言わない場合、"git push" は何をすべきですか?」を参照してください。

現在の設定(つまりpush.default=matching) では、git push引数を指定しないと、ローカルおよびリモートに存在するすべてのブランチが同じ名前でプッシュされます
これは通常、開発者が自分のパブリック リポジトリにプッシュする場合に適していますが、共有リポジトリを使用する場合は危険ではないにしても混乱を招く可能性があります。

提案は、デフォルトを ' upstream'に変更することです。つまり、現在のブランチのみをプッシュし、それを git pull がプルするブランチにプッシュします。
別の候補は ' current' です。これにより、現在のブランチのみが同じ名前のリモート ブランチにプッシュされます。

これまでに議論された内容は、次のスレッドで確認できます。

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

以前の関連する議論は次のとおりです。

ディスカッションに参加するには、メッセージを git@vger.kernel.org に送信してください。

于 2012-03-17T11:13:18.793 に答える
18

これを .gitconfig エイリアス セクションに入れただけで、その仕組みが気に入っています。

pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"

現在のブランチをオリジンgit pubまたは別のレポにプッシュしgit pub repo-nameます。美味しい。

于 2010-03-15T00:50:08.213 に答える
13

コマンドで現在のブランチをプッシュできます

git push origin HEAD

ここから取った)

于 2015-06-23T07:50:35.513 に答える
8

git push は、すべてのローカル ブランチをリモート サーバーにプッシュしようとしますが、これは望ましくない可能性があります。これに対処するための便利なセットアップがいくつかあります。

「gpull」と「gpush」を適切にエイリアスします。

~/.bash_profile で

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'

したがって、「gpush」または「gpull」を実行すると、「現在オン」のブランチだけがプッシュされます。

于 2009-06-04T02:49:08.927 に答える
3

エイリアスを使用するよりも、より簡単にソース管理できるようにgit-XXXスクリプトを作成する方が好きです(開発者全員が、このタイプのもののパスに特定のソース管理ディレクトリを持っています)。

このスクリプト(と呼ばれるgit-setpush)は、valueのconfig値をremote.origin.push、現在のブランチのみをプッシュするものに設定します。

#!/bin/bash -eu

CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2)
NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH

echo "setting remote.origin.push to $NEW_PUSH_REF"
git config remote.origin.push $NEW_PUSH_REF

を使用しているため、レビューブランチにプッシュするGerritターゲットを設定していることに注意してください。refs/for/XXXまた、originがリモート名であると想定しています。

ブランチをチェックアウトした後に呼び出します

git checkout your-branch
git setpush

明らかにチェックアウトも実行するように適合させることができますが、私はスクリプトが1つのことを実行し、それをうまく実行するのが好きです。

于 2012-04-19T15:55:22.627 に答える
2

これらのタスクを自動化するために、次の関数を .bashrc ファイルに追加しました。git push/git pull + 現在のブランチの名前を実行します。

function gpush()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpush
git: for current branch: push changes to remote branch;
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git push ${bname}
    set +x
  fi
}

function gpull()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpull
git: for current branch: pull changes from
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git pull ${bname}
    set +x
  fi
}
于 2014-05-22T07:43:59.510 に答える