1. ホーム
  2. git

[解決済み] masterからdevelopmentブランチに "git pull "する方法

2022-03-16 19:13:46

質問

開発中の "dmgr2" というブランチがありますが、master ブランチ(ライブサイト)からプルして、すべての変更を開発ブランチに取り込みたいと思っています。これを行うための良い方法はありますか?

以下は、変更をコミットした後に私が計画していたことです。

git checkout dmgr2
git pull origin master

これは、開発ブランチにライブの変更を取り込むことです。

解決方法は?

しかし、より多くのオプションを提供する、より長い方法があります。

git checkout dmgr2      # gets you "on branch dmgr2"
git fetch origin        # gets you up to date with origin
git merge origin/master

fetch コマンドの前の任意の時点で行うことができます。 merge つまり、フェッチとチェックアウトの順番を入れ替えることができるのです。 fetch は名前付きリモートに移動するだけです ( origin つまり、すべてのブランチでのすべてのコミットです。 これらはあなたのリポジトリにコピーされますが、名前は origin/branch という名前のブランチに対して branch をリモートで実行します。

この時点で、任意のビューア( git log , gitk など)を使って、相手が持っていて自分が持っていないものを見たり、その逆をしたりします。 時には、これはウォーム・ファジー・フィーリングにのみ有効であり("ああ、そうだ、それは実際に私が欲しいものだ")、時には完全に戦略を変えるのに有効です("おっ、私はまだそのものを望んでいないよ")。

最後に merge コマンドは与えられたコミットを受け取ります。 origin/master を実行したときのブランチに、そのコミットとその先祖を取り込むために必要なことを何でもします。 merge . を挿入することができます。 --no-ff または --ff-only を使用して早送りを防ぐか、または結果が早送りの場合のみマージを行います。

シーケンスを使用する場合。

git checkout dmgr2
git pull origin master

その pull コマンドは、gitに対して git fetch に相当し、その後、道徳的に git merge origin/master . つまり、これは ほとんど は、この2つのステップを手で行うのと同じですが、おそらくあなたにとってあまり気にならない微妙な違いがいくつかあります。 (特に fetch で実行されるステップは pull 持ち越し だけ origin/master を実行しても、あなたのレポの参照は更新されません。 1 によってのみ参照されるようになります。 FETCH_HEAD 参照)。

もし、より明示的な git fetch origin (その後オプションで見回る)、そして git merge origin/master のシーケンスを使用すると、自分のローカルな master を1回実行するだけで、リモートの最新の状態にすることができます。 fetch をネットワーク上で実行します。

git fetch origin
git checkout master
git merge --ff-only origin/master
git checkout dmgr2
git merge --no-ff origin/master

といった具合に。


1 git 1.8.4 では、この二番目の部分が変更され、つまり "fixed"- となり、 "remote branch" への参照が臨機応変に更新されるようになりました。 (リリースノートによると、更新をスキップするのは意図的な設計上の決定だったのですが、git が更新するのを好む人が多いことが判明しました。 古いリモートブランチの SHA-1 が必要な場合は、デフォルトで reflog に保存され、そこから復元できるようになっています。 これは、上流のリベースを見つけるための新しい git 1.9/2.0 機能も有効にします)。