web-dev-qa-db-ja.com

masterでブランチを最新の状態に保つ

リモートリポジトリを取得し、そこから分岐しています。マスターに変更を加えて、新しいブランチを最新に保ちたいです。以下のワークフローについて考えていますが、それは理にかなっていますか、これを行うためのより良い方法がありますか?

  1. 最初の分岐とチェックアウト:

    git checkout master
    
    git pull
    
    git checkout -b my_branch
    
  2. 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

大丈夫?

24
larryq

コマンドを単純化できます:

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 pullgit fetchgit mergeの単なる組み合わせであることに注意してください。

通常、必要なのはgit pull --rebaseで、これは本質的にgit fetchgit rebaseであり、はるかにクリーンな履歴を作成します。

「定期的なプッシュ」の理由はありますか?同じブランチで作業している人が他にいない場合は、すべてを完了してからプッシュするだけで問題ありません。

17
michas

リベースワークフローを使用することをお勧めします。したがって、git pullを使用する代わりに、git pull --rebaseを使用する必要があります。

機能ブランチでも同じことをします。したがって、git merge master --no-ffを実行する代わりに、git rebase masterを使用します。ただし、機能ブランチが開発中に同僚と共有されることを意図している場合は、マスターブランチを定期的に機能ブランチにマージすることをお勧めします。

しかし、正直なところ、私は小さなチームで働いており、機能ブランチで一緒に作業する必要があり、マスターと最新のものにする必要がある場合は、作業を短時間中断します(そしてプロセスを明確に伝えます) 、マスターをリベースし、機能ブランチを強制的にプッシュします。しかし、そうです、それは大規模なチームには対応していません。ただし、masterからのマ​​ージを処理する代わりに、masterにリベースされた機能ブランチを使用する方がはるかに便利です。

必ずこれを読んでください。

Gitワークフローとリベースとマージの質問

11
Christoph