マスターブランチと開発ブランチ間の「git pull」または「git merge」


243

私は自分のmasterブランチとdevelop、いくつかの変更に取り組むためのブランチを持っています。からmasterへの変更をマージする必要がありますが、develop最終的にはからdevelopにすべてをマージしますmaster。私は2つの異なるワークフローを念頭に置いています。

  1. git pull origin masterdevelop分岐
  2. git merge masterdevelop分岐

これを行うための最良の方法はどれですか、そしてなぜですか?



2
git pull= git fetch+git merge FETCH_HEAD
Yousha Aleayoub 2017年

回答:


104

リベースには注意してください。開発ブランチを誰かと共有している場合、リベースは混乱を招く可能性があります。リベースは、自分のローカルブランチにのみ適しています。

経験則として、ブランチをオリジンにプッシュした場合は、リベースを使用しないでください。代わりに、マージを使用してください。


それでも、リベースgit push origin rebasedBranch --forceしてプライベートリポジトリに配置しても安全ですか?唯一のユーザーは私です。
k0pernikus 2012年

はい、もちろんあなたが唯一のユーザーであれば安全です。私は自分だけがgit push --forceを使用しています。:)
タイラー・リック

3
私はエリックの警告を繰り返します。ただし、独自のリモートブランチをリベースすることも完全に問題ありません。リベースとマージの両方で遊んでみれば、それぞれの長所と短所を理解し、いつ使用するかを学ぶことができます。
Ian Lotinsky 2013

リベースの使用に関する良い記事、競合の解決後のマージも:github.com/everpix/Everpix-Intelligence
Ian Lotinsky 2014年

@IanLotinskyあなたのリンクはリベースに関する記事を指していません。ロングショットですが、まだ正しいリンクがありますか?:)
Daniel Serodio

347

このワークフローは私にとって最適です。

git checkout -b develop

...変更を加えます...

...通知マスターが更新されました...

...変更をコミットして開発します...

git checkout master
git pull

...それらの変更を開発に戻します...

git checkout develop
git rebase master

...さらに変更を加えます...

...開発を約束する...

...それらをマスターにマージします...

git checkout master
git pull
git merge develop

2
これも私の仕事のやり方で、うまくいくと思います。私がやらないことが1つあります。git pullそれは決勝戦の直前git merge developです。その目的は何ですか?
crdx 2012

...通知マスターが更新された後...コミットしない場合、チェックアウトマスターはローカルの変更をワイプして開発しませんか?
a1an

1
@ a1anいいえ。ただし、コミットしない場合、変更はマスターブランチに移動し、gitはコミットされるまでプルできません。
elemjay19

5
@crdxおそらく、ブランチをローカルマスターにマージする前に、他のブランチがリモートマスターにマージされます。リモートマスターの変更をプルして、マスターのローカルコピーに取り込みます。これが私が理解した方法です。
タルン2013

12
git pull --rebase origin master開発ブランチでは少し高速です。
Nathan Lilienthal 2013

24

この種のものに対する最善のアプローチは、おそらくgit rebaseです。変更をマスターから開発ブランチにプルすることができますが、すべての開発作業はマスターからのものの上に(後でコミットログで)残しておきます。新しい作業が完了すると、マスターへのマージは非常に簡単になります。


10
良いアドバイスは、develop他の誰とも共有されないと仮定することです。
カールビーレフェルト

1
@KarlBielefeldt 他の寄稿者develop と共有されている場合develop、一部のホットフィックスが直接プッシュされたときにどのように更新しmasterますか?マージを行う必要がありgit checkout master && git pull --rebase && git checkout develop && git merge masterますか?私は上記の最も投票された回答にコメントを残しました。これもこの懸念の詳細です。
modulitos

5

開発ブランチを誰とも共有していない場合は、マスターが更新されるたびにリベースします。これにより、開発をマスターにマージしてマージし直すと、履歴全体でコミットコミットが行われなくなります。この場合のワークフローは次のようになります。

> git clone git://<remote_repo_path>/ <local_repo>
> cd <local_repo>
> git checkout -b develop
....do a lot of work on develop
....do all the commits
> git pull origin master
> git rebase master develop

上記の手順により、開発ブランチが常にマスターブランチからの最新の変更の上にあることが保証されます。ブランチの開発が完了し、マスターの最新の変更にリベースしたら、マージして戻すことができます。

> git checkout -b master
> git merge develop
> git branch -d develop

1

私の経験則は:

rebase同じ名前のブランチのmerge場合、それ以外の場合。

同じ名前の例はmasterorigin/masterotherRemote/masterです。

場合developのみ、ローカルリポジトリ内に存在し、そして常に最新のが基づいているorigin/masterコミット、あなたはそれを呼び出す必要がありますmasterし、そこに直接仕事。それはあなたの人生を簡素化し、実際にあるものを提示します:あなたはmasterブランチで直接開発しています。

develop共有されている場合は、に基づく必要はなくmaster、単ににマージして戻し--no-ffます。で開発していdevelopます。masterそしてdevelop我々は彼らが異なるものもあり、独立した滞在したいので、別の名前を持っています。と同じにしないでくださいrebase

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