web-dev-qa-db-ja.com

開発ブランチでgit pull Origin masterを実行するとどうなりますか?

私は、masterの前に2回のコミットがある、developというプライベートトピックブランチがあるとしましょう。

git pull Origin masterは何をしますか?

ローカル開発のリモートマスターからすべてを引き出してマージしますか?ローカルマスターブランチのすべてを引き出してマージしますか?

そして、最初にgit checkout masterなしで開発からマスターを更新する方法はありますか?

54
e-satis

git pull Origin masterは、Originというリモートからマスターブランチを現在のブランチにプルします。 ローカルマスターブランチではなく、現在のブランチにのみ影響します。

次のような履歴が表示されます。

- x - x - x - x (develop)
   \         /
    x - x - x (Origin/master)

ローカルマスターブランチはこれには関係ありません。 git pullは、本質的にgit fetchおよびgit merge;リモートブランチをフェッチし、それを現在のブランチにマージします。それは他のようなマージです。魔法のようなことは何もしません。

ローカルマスターブランチを更新する場合は、チェックアウトする以外に選択肢はありません。 Gitはマージを実行するために作業ツリーを必要とするため、チェックアウトされていないブランチにマージすることはできません。 (特に、マージの競合を報告し、それらを解決できるようにするために絶対に必要です。)

マスターへのプルが早送りになることがわかっている場合(つまり、ローカルマスターブランチにOriginのマスターにないコミットがない場合)、回避することができます この回答で説明されているように =。

81
mrj

コミットしたら、使用してブランチに変更を加えます

git add -A
git commit -m <message>

その後、次のことができます。

git pull Origin master

ブランチに追加すると、コミットがマスタープルの上に保持されます。これで、あなたのブランチは、マスター+コミットが一番上になります。そのため、次のことができるようになりました。

git Push

gitは、マスターコミットと共に変更をブランチにプッシュします。その後、それをGithubのマスターに簡単にマージできます。

4
Vlad