現在のブランチのみをgitpullするにはどうすればよいですか?


81

どのブランチを指定せずにこれを設定する設定方法はありますか?

回答:


84

Gitはすでに現在のブランチのみをプルしています。ブランチをトラッキングブランチとして設定している場合は、リモートブランチを指定する必要はありません。 git branch --set-upstream localbranch reponame/remotebranch追跡関係を設定します。次に発行するgit pull [--rebase]と、そのブランチのみが更新されます。

もちろん、すべてのリモート追跡ブランチとリモートのすべての参照が更新されますが、変更されるのはローカル追跡ブランチのみです。

この一般的な操作の入力を減らすのに役立つBashエイリアス:

# Add an alias to pulling latest git changes into your same branch
alias pullhead='git pull origin $(git rev-parse --abbrev-ref HEAD)'

同じことを行うPowershell関数:

Function pullhead {
    $cur_head="$(git rev-parse --abbrev-ref HEAD)"
    & git pull origin ${cur_head}
}

その権利、そして「git push」(デフォルト)が(同じリモート名で)すべてのブランチをプッシュしようとするため、少し奇妙かもしれません。
アレッサンドロデシモーネ

2
@AlessandroDsそうですね、その理由だけで、push.defaultをアップストリームに設定しました。push.defaultの新しいデフォルトは「simple」であり、これも現在のブランチのみを更新するため、pullが行うこととはるかに並行しています。
セスロバートソン

1
@Danjah:すべての変更はリモートリポジトリからプルされます(たとえば、origin / master origin / fooなどのリモートトラッキングブランチに)。アップストリームが定義されているローカルブランチにチェックアウトすると、そのローカルブランチのみが更新されます。アップストリームのないローカルブランチにチェックアウトする場合は、詳細情報を指定するか、アップストリームを設定する必要があります。非ローカルチェックアウトを変更しようとしないでください。ローカルブランチを作成して続行してください。転送するものを減らしたい場合は、ローカルのgitconfigでリモートのrefspecを更新できます。
セスロバートソン

1
すべての参照を更新せず、現在のブランチのみをフェッチする組み込みの方法はありますか?
Aditya MP

1
@aditya menon:簡単ではありません。必要な特定の参照(ブランチ、タグなど)のみをフェッチするように、refspec(git config remote.origin.fetchなど)を更新する必要があります。より具体的な例については、stackoverflow.com / questions / 15507264 /…を参照してください。
セスロバートソン

61

私はちょうどこのようにそれをしました:

git pull origin "$(git branch | grep -E '^\* ' | sed 's/^\* //g')"

または

git pull origin $(git rev-parse --abbrev-ref HEAD)

これにより、から現在のブランチが抽出されgit branch、そのブランチがリモートオリジンからプルされます。

Seth Robertsonが言ったように、引数が指定されていない場合、現在のブランチのみが変更され、すべてのリモートブランチがフェッチされることに注意してください。すべてのリモートブランチをフェッチしたくないので、この方法で取得しました。


3
git branchブランチ情報について実際に解析するべきではありません。この情報はで利用可能であるgit rev-parseコマンドを作る:git pull origin $(git rev-parse --abbrev-ref HEAD)
ポールDelRe

@ayke Paul DelReの回答も機能したので、追加しました。両方とも気にしないでください
Timo Huovinen 2016

1
ただ好奇心が強い:単純な「gitpull」(プルしたいブランチをチェックアウトした)とあなたの提案の違いは何ですか?git pull origin <current-branch>とにかく、コマンド置換の結果、どちらがデフォルトになりますか?他のリモートブランチ(たとえば、origin / other-branchなど)が更新されていないため、トラフィックが減少していることを意味していますか?
ピーター-モニカを復活

私は何年も前にこれに答えました、私はもう本当に知りません。おそらく...受け入れ答えで行くべき
ayke

@ PeterA.Schneider入力するだけgit pullで、のようなメッセージが表示される場合がありますThere is no tracking information for the current branch. Please specify which branch you want to merge with.。その後、常に入力することになりますgit pull origin my-feature-branch。追跡情報がないという状況がどのようにして発生するのか、本当に知りたいです。
アルフェ2018

18

更新

私が追加した古い答えはもう機能しません:/。しかし、私が配置したPUSHバージョンについていくつかの賛成票を受け取った後、私にとって、この回答は実際に検索エンジンからここに来る人を助けていることを意味するので、この回答を保持します。

新しいバージョンのgitでこれを試してください:

$ git config --global push.default current

9
pull.defaultが存在するとは思わない。git-scmまたはkernel.orgを参照してください 。
モート2015年

2
はい。Linux上のgit2.3.4は、上記の場合でもすべてのブランチをフェッチしますpull.default=current。私git cloneもデフォルトで追加されているようですremote.origin.fetch=+refs/heads/*:refs/remotes/origin/*が、それはかなり標準的です。
モート2015年

6
構成pull.default変数はありません。それをgitconfigに入れても、何も起こりません。
デビッドサンダース

5
質問はgitpullに関するもので、答えには多くの賛成票を伴うgitpushが含まれています。これは誤解を招く@BrunoCasaliです。うまくいったのに、なぜ回答を編集して削除したのですか。答えが間違っていることに気付いた場合は、賛成票を維持するために無関係な情報を保持するのではなく、削除してください。
TJ

5

はい、次のように変更できる構成があります.gitconfig

[push]
  default = current

これにより、現在のブランチがプッシュされ、受信側で同じ名前のブランチが更新されます。

チェック:

git config --global --get push.default

git-configを参照してください。


3

ザ・ --set-upstreamフラグが廃止されて除去されます。したがって、--trackまたは--set-upstream-to

例:このブランチの追跡情報を設定する場合は、次の方法で行うことができます。

git branch --set-upstream-to=<remote>/<branch> develop

非推奨になる可能性がありますが(ソース?)--set-upstream-to=、追跡情報がわからない場合はgitによって言及され続けます。非推奨については言及されていません。
エイドリアン2017

@AdrienGiboire非推奨に関する情報は次のとおり
browse

0

これは、リモートがリモートであるoriginと想定せず、ブランチがリモートを追跡していない場合に処理するgitエイリアスです。

pullh = "!f() { set -e; set -o pipefail; arr=($(git rev-parse --abbrev-ref @{u} | sed 's/\\//\\n/')); git pull ${arr[0]} ${arr[1]}; }; f"

(免責事項:私は非常にbashの初心者であり、上記はおそらくかなり単純化される可能性があります。)

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