2012-01-05 12 views
45

私は、マスターの前に2つのコミットで開発というプライベートトピックブランチがあるとします。開発ブランチでgit pull origin masterを実行するとどうなりますか?

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

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

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

答えて

72

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

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

あなたのローカルマスターブランチが、この中には無関係です:

は、それはあなたにこのような歴史探して何かを与えるでしょう。本質的には、git fetchgit mergeの組み合わせである。git pullは、本質的にgit fetchgit mergeの組み合わせである。リモートブランチをフェッチして、現在のブランチにマージします。それは他のもののようなマージです。何も魔法を使わない。

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

マスターに引き込むのが早送りであることがわかった場合、つまりローカルマスターにコミットがない支店の原点にないブランチ)は、as described in this answerを回避することができます。

+1

ローカルでチェックアウトされていないブランチに転送することができます(高速転送可能な場合)。しかしそれはかなりハックです;) – knittl

+0

@knittl:True!あなたが早送りできるかどうかを確認するという点で、プッシュは優雅です。 reflogに正しいトレースを残すことができるので、私は 'update-ref'ソリューションが好きです。私はそれに執着しています。 – mrj

+0

@ e-satis:新規ユーザーに質問を投票させることは奨励されます...しかし、答弁する価値があり、アップヴォートの価値があることは必ずしも同じことではありません。 (あなたの質問は両方ですが) – Cascabel

3

あなたはあなたがそれから行うことができます

git add -A 
git commit -m <message> 

を使用してブランチに変更しコミットしたら:あなたのブランチに

git pull origin master 

、それはマスタープルの上にあなたのコミットを維持します。あなたのブランチはマスター+上のコミットでさえもなります。だから、あなたが今できること:マスターはあなたブランチにコミットして

git push 

とgitのは一緒に、あなたの変更をプッシュします。それをGithubのマスターに簡単にマージすることができます。

+0

@ mrjの答えの後に読んだ場合、これは良い追加でした。ほとんど同じように、 – kushalvm

関連する問題