困ったこと
プロジェクトにおいて、新しい機能の開発やバグ修正を行う際、通常は特定のブランチ(例えば**feature
ブランチやbugfix
ブランチ)から新しいブランチを作成します。しかし、間違ってdevelop
**ブランチから新しいブランチを作成してしまうことがあります。このような状況は、特に大きなプロジェクトや多くの開発者が関わる環境でよく発生します。
以下は、そのような状況の一例です:
e078d2b27c3b (HEAD -> feature/new-feature, origin/feature/new-feature) [api] fix - ...
1f217f6f5829 [api] fix - ...
c1048fc72e55 [api] fix - ...
1f7164ecb346 [api] move and add definitions to protocols belonging to area
78f3f8ec288c [api] add area code-based ranking protocol
解決方法
この問題を解決するためには、以下の手順を実行します
-
新しいブランチの作成
正しいベースブランチ(この場合は**feature/special-event
**)から新しいブランチを作成します。git checkout feature/special-event git pull git checkout -b correct-branch
-
必要なコミットの適用
誤ったブランチから正しいブランチへ必要なコミットを移動します。これは**cherry-pick
**コマンドを使用して行います。git cherry-pick e078d2b27c3b git cherry-pick 1f217f6f5829 git cherry-pick c1048fc72e55 # 必要なすべてのコミットに対して繰り返します
-
新しいブランチをリモートにプッシュ
修正したブランチをリモートリポジトリにプッシュします。git push origin correct-branch
-
新しいプルリクエストの作成
GitHub上で、新しいブランチから目的のベースブランチ(feature/special-event
)に向けてプルリクエストを作成します。
図解
-
誤ったブランチの状況:
develop | |--- commit A (78f3f8ec) |--- commit B (1f7164ec) | |--- feature/new-feature (誤ったブランチ) | |--- commit C (c1048fc7) |--- commit D (1f217f6f) |--- commit E (e078d2b2)
-
cherry-pick
のプロセスfeature/special-event (正しいベースブランチ) | |--- correct-branch (新しいブランチ) | |--- cherry-pick commit C (c1048fc7) |--- cherry-pick commit D (1f217f6f) |--- cherry-pick commit E (e078d2b2)
-
最終的なブランチの状態
feature/special-event | |--- correct-branch | |--- commit C (c1048fc7) |--- commit D (1f217f6f) |--- commit E (e078d2b2)
まとめ
誤ったブランチからブランチを作成してしまった場合、**git cherry-pick
**を使用して必要なコミットを新しい、正しいブランチに移動することで問題を解決できます。この方法は、既にいくつかの作業が行われている場合に特に有効です。Gitは非常に強力なツールであり、このような一般的な問題を解決するための複数の方法を提供しています。