web-dev-qa-db-ja.com

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

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

  1. git pull Origin masterdevelopブランチに
  2. git merge masterdevelopブランチに

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

238
Carson

リベースには注意してください。あなたが他の人とあなたのDevelopブランチを共有しているなら、rebaseは物事を台無しにすることができます。 Rebaseはあなた自身の地元の支店にのみ有効です。

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

101
Eric Leads

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

git checkout -b develop

...いくつか変更を加えます...

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

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

git checkout master
git pull

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

git checkout develop
git rebase master

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

...彼らが成長することを約束する...

...それらをマスターに統合する...

git checkout master
git pull
git merge develop
343
Ian Lotinsky

この種のことに対する最善のアプローチはおそらく git rebase です。それはあなたがmasterからあなたの開発ブランチへ変更を引っ張ることを可能にします、しかしあなたの開発作業の全てを(後でコミットログに)masterからのものの上に残します。あなたの新しい仕事が完了したら、マスターに戻るマージはとても簡単です。

23
divegeek

開発ブランチを他の人と共有していないのであれば、masterが更新されるたびにそれをリベースするだけです。そうすれば、開発をマスターに戻してマージしてしまうと、履歴全体にマージコミットはできなくなります。この場合のワークフローは次のようになります。

> 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

上記のステップは、開発ブランチが常にマスターブランチからの最新の変更の上にあることを保証します。 Developブランチが終了し、masterの最新の変更にリベースされたら、それをマージすることができます。

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

私の経験則は、

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

同じ名前の例としては、masterOrigin/master、およびotherRemote/masterがあります。

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

developが共有されている場合は、masterを基にしてはいけません。単に--no-ffでマージしてください。あなたはdevelopで開発しています。 masterdevelopは異なる名前にして、別々にしたいので、名前は異なります。 rebaseと同じにしないでください。

1
hoijui