2013-11-20 18 views
243

私はdmgr2(開発)というブランチを持っており、マスターブランチ(ライブサイト)から引き出し、すべての変更を自分の開発ブランチに組み込みたいと思います。これを行うには良い方法がありますか?ここ は私が行う上で計画していたものです:gitをmasterから開発ブランチに引き出す

git checkout dmgr2 
git pull origin master 

これは私の開発ブランチにライブ変更をプルする必要があり、または私はこの間違ったを持っていますか?あなたが記載されている

+1

dmgr2ブランチの変更をすべてコミットします。 master 1.git checkout masterをポイントして最新の変更を取得します 2.git pull 3.git merge dmgr2 4.git push -u origin masterそして、あなたのdmgr2に戻ります。 5.git checkout dmgr2 –

+0

私はすでにdmgr2ブランチへの変更をすべてコミットしました。申し訳ありませんが、私がステップ4を実行する場合は –

+0

を追加するのを忘れてしまいました。私はそれをしたくない –

答えて

360

の手順が動作しますが、あなたはより多くのオプションを提供します長い方法があります:

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)に行き、「私が持っていないことをすべて手に入れてください」と言います。つまり、すべてのブランチにコミットします。それらはリポジトリにコピーされますが、リモートのbranchというブランチの場合はorigin/branchという名前になります。

この時点では、ビューア(git loggitkなど)を使用して、自分が持っていないものを表示することができます。逆も同様です。時にはこれは、あたかも暖かいファジー感情( "ああ、そうです、それは実際に私が欲しいものです")にのみ役立ち、時には戦略を完全に変えるのにも役立ちます。

最後に、mergeコマンドは、origin/masterとして名前を付けることができ、与えられたコミット取り、それはあなたがmergeを実行するときに、あなたがどんな枝に、そのコミットとその祖先に持って来るために取るものは何でもありません。 --no-ffまたは--ff-onlyを挿入すると、早送りを防止したり、早送りの場合にのみマージしたりできます。

あなたはシーケンスを使用します。

git checkout dmgr2 
git pull origin master 

pullコマンドがgit fetchを実行し、git merge origin/masterの道徳的同等にするgitのを指示します。だからこれはです。手で2つのステップを実行するのと同じですが、おそらくそれほどあなたに関係していない微妙な違いがあります。 (特にpullによって実行fetchステップはのみorigin/masterの上にもたらし、そしてそれはあなたのレポで参照を更新しません:1新たなコミットを巻き取る呼ば-にのみ特別FETCH_HEAD参照することによって。)

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

:あなたはシーケンスを(その後、必要に応じて辺りを見回す)より、明示的なgit fetch originを使用して、git merge origin/master場合は、ネットワーク全体で一つだけfetch実行して、リモートで最新の状態にあなた自身のローカルmasterをもたらすことができます例えば。


この第二の部分は変更さ-Iがされてきた今、日和見 "リモートブランチ" の参照を更新し-in gitの1.8.4を、 "固定" と言います。 (リリースノートのように、アップデートをスキップする意図的な設計の決定だったが、もっと多くの人々がgitをアップデートすることを好むことが判明した。古いリモートブランチSHA-1が必要な場合は、デフォルトではreflogに保存され、したがって回復可能です。これにより、アップストリームのリベースを見つけるためのgit 1.9/2.0の新しい機能が有効になります)。

+12

私はちょうど友人を求めています - ここにある最初のコードブロック(チェックアウト/フェッチ/マージ)を元に戻すにはどうしたらいいですか? –

+4

@RichBradshaw: 'git checkout'は通常は破壊的ではなく、通常は' git fetch'を元に戻す必要はないので、マージコミットを取り消す方法を聞いているようです。答えは他のコミットと同じです: 'git reset'か' git revert'です。 *未公開*の変更については、通常はgit resetが最適な方法です。すでに他の変更がある場合は、 'git revert'が良いかもしれませんが、マージを元に戻すためのLinus Torvaldのアドバイスを参照してください:https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a- faulty-merge.txt – torek

+0

どのマージビューアプログラムを使用するかはどのように設定しますか? – PositiveGuy

関連する問題