ウェブサイト検索

Gitブランチを早送りして更新する方法


Gitのブランチで作業する際には、"develop"、"release"、または"staging"などの異なるブランチを保持する必要があります。

Gitのブランチで作業する際には、「develop」、「release」、または「staging」などの異なるブランチを保持することがしばしば必要です。Gitを使えば、ブランチを迅速に進めて他のブランチと最新の状態に保つことが簡単です。たとえば、ステージングでの変更を含むようにリリースブランチを更新することなどができます。

Gitブランチの早送り

Gitでは、ブランチは特定のコミット、つまりブランチのHEADを指すポインタです。ブランチは、ブランチが新しいコミットで更新されたり、別のブランチとマージされたりする時に変更できるラベルに過ぎません。

2つの分岐したブランチを統合するには、git mergeを使用します。通常、これにより2つのブランチの履歴を統合するマージコミットが作成されます。たとえば、フィーチャーブランチからメインブランチにプルリクエストを介してコミットが引き込まれる場合などです。

しかし、2つのブランチが同じ履歴を持つ場合、Gitは特別な早送りマージを行います。上の例では、リリースブランチのHEADがdevelopの履歴に含まれているため、マージコミットは必要ありません。その代わりに、releaseはdevelopを指すように更新されます。このための特別なgit fast-forwardコマンドはありません; 他のどのマージと同じようにシンプルなマージです。マージするときは、変更を受け取るブランチをチェックアウトしたいです。この場合、releaseが更新されるブランチなので、リリースをチェックアウトします:

git checkout release

次に、開発ブランチをそれにマージでき、これにより早送りが行われます。

git merge develop

Git GUI クライアントを使用している場合、このプロセスはより直感的かもしれません。ほとんどのクライアントでは、古いブランチを右クリックして、現在作業しているブランチと最新の状態にするオプションがあります。

リモートブランチの早送り

注意すべきことは、早送りはあなたのローカルリポジトリのみを更新するということです。リモートを更新するには、Githubにプッシュする必要があります。GUIクライアントを使用している場合、プッシュするまでリモートリポジトリのラベルが古くなっているのを見るかもしれません。

ブランチを早送りしてもコミットは作成されませんが、それでもGitHub ActionsのようなCI/CDパイプラインをトリガーするはずです。もしそうならない場合は、常にマージコミットを作成するオプションがあります。

git merge --no-ff

これは、フィーチャーブランチが常にメインブランチから分離され、統合されたときにマージコミットを作成するような、より明示的なブランチトポロジーを維持するのに役立つ場合があります。デフォルトでは、フィーチャーをマージする際にメインブランチに何も変更がなかった場合、Gitは通常期待されるマージコミットを作成するのではなく、メインブランチを早送りします。--no-ffフラグを使用すると、その動作を防ぐことができます。

あるいは、ファストフォワードを試みたい場合、マージコミットが必要な場合に失敗しますが、--ff-onlyフラグを使用できます。

関連記事: