リモートリポジトリを取得し、そこから分岐しています。マスターに変更を加えて、新しいブランチを最新に保ちたいです。以下のワークフローについて考えていますが、それは理にかなっていますか、これを行うためのより良い方法がありますか?
最初の分岐とチェックアウト:
git checkout master
git pull
git checkout -b my_branch
my_branch
、その後定期的に:
git checkout master
git pull
git checkout my_branch
git merge master --no-ff
必要に応じてステップ2を繰り返し、リモートmy_branch
。
次に、マージバックの準備ができたら:
git checkout master
git merge my_branch --no-ff
大丈夫?
コマンドを単純化できます:
1。
git fetch
git checkout -b my_branch Origin/master
2。
git fetch
git merge Origin/master
git fetch
はリモートブランチを更新します。通常、このブランチで作業する予定がない場合は、ブランチのローカルコピーを保持する必要はありません。
--no-ff
を設定した後、git config --global merge.ff false
を省略できます。
git help config
のコメント:
merge.ff
By default, Git does not create an extra merge commit when merging
a commit that is a descendant of the current commit. Instead, the
tip of the current branch is fast-forwarded. When set to false,
this variable tells Git to create an extra merge commit in such a
case (equivalent to giving the --no-ff option from the command
line). When set to only, only such fast-forward merges are allowed
(equivalent to giving the --ff-only option from the command line).
git pull
はgit fetch
とgit merge
の単なる組み合わせであることに注意してください。
通常、必要なのはgit pull --rebase
で、これは本質的にgit fetch
とgit rebase
であり、はるかにクリーンな履歴を作成します。
「定期的なプッシュ」の理由はありますか?同じブランチで作業している人が他にいない場合は、すべてを完了してからプッシュするだけで問題ありません。
リベースワークフローを使用することをお勧めします。したがって、git pull
を使用する代わりに、git pull --rebase
を使用する必要があります。
機能ブランチでも同じことをします。したがって、git merge master --no-ff
を実行する代わりに、git rebase master
を使用します。ただし、機能ブランチが開発中に同僚と共有されることを意図している場合は、マスターブランチを定期的に機能ブランチにマージすることをお勧めします。
しかし、正直なところ、私は小さなチームで働いており、機能ブランチで一緒に作業する必要があり、マスターと最新のものにする必要がある場合は、作業を短時間中断します(そしてプロセスを明確に伝えます) 、マスターをリベースし、機能ブランチを強制的にプッシュします。しかし、そうです、それは大規模なチームには対応していません。ただし、masterからのマージを処理する代わりに、masterにリベースされた機能ブランチを使用する方がはるかに便利です。
必ずこれを読んでください。