TL;DR
先日、GitLabでマージする際に削除したくない共有ブランチを削除してしまった時に、GitHubやローカルでブランチを削除した際の対処法の記事は多く見受けられたのですが、GitLabに関する記事が少なかった(日本語はない?)ので備忘録として投稿します。
急いでいる方は、解決策のところだけお読みください。
背景
現在、長期インターンシップでエンジニアとしてシステム開発をしていますが、その開発形態として
- タスクを振ってもらう。(この機能追加して〜。このバグ修正して〜。など)
- 開発環境ブランチからそのタスク用のブランチを作成し、実装する。
- 実装できたらマージリクエストをしてレビューしてもらう。
という流れを繰り返して進めています。
そこであるタスクについて実装中に、「開発環境ブランチにいくつかマージしました〜。」という連絡を受けたので、「マージリクエストの際にコンフリクト起きるの嫌だな〜」と思ったので、実装を一時退避して現在のタスク用のブランチにマージしようとお気持ちで、GitLabで開発環境ブランチからタスク用ブランチのマージリクエストを作成し、マージしました。そしてマージ完了の文字と共に戦慄する文字(Deleted the source branch.
)が並んでいました...。
原因
マージリクエストを作成した後、マージするときにDelete source branch
というチェック項目があり、こちらをチェックにすることでマージ後にソースブランチが削除されるようになります。こちらデフォルトでチェックが入っていることに気づかず、マージしてしまったのが原因です。
解決策
削除前のブランチのcommitSHA
を元に新たにブランチを作成することで元のブランチが復活します。
具体的な手順
- 落ち着く。
焦ってはさらに大きなミスにつながるかもしれないので大きく深呼吸しましょう。 - マージしたターゲットブランチのHistoryを開く。
- ソースブランチだったコミット(マージしたコミットの一つ前のコミット)の
commitSHA
をコピーする。(右のボタンでもコピー可能) - ブランチを新規作成画面でブランチ名にソースブランチの名前を入力し、
Create from
の部分をクリックして検索ボックスの部分に先ほどのcommitSHA
を入力しEnterを押し、Create branch
する。
この手順で元のソースブランチは復活します。
お気持ち
GitHubではマージ処理を元に戻すボタンがあるようですが、なぜGitLabにはないのでしょうか...。(open issueになっているようなので是非はやく実装してもらいたい。)
また、デフォルトでDelete source branch
にチェックが入っているのがどうなんだろうという気持ちです。(共同のリポジトリでも個人のリポジトリでもソースブランチを消したいと思うタイミングに遭遇したことがない。)
参考