はじめに
git
にはrebase
というコマンドが存在し、以下のようなことを行うことが出来ます。
- 作業ブランチの親コミットを、最後尾に変更する。
- 複数コミットを1つにまとめる。
本記事では「2. 複数コミットを1つにまとめる」をVSCode
を使用して簡単に行う方法をご紹介します。
①例えば以下のように、main
ブランチからfeature
ブランチを生やすとします。
②続いて、feature
ブランチで以下のような2つのコミットを行いました。
③最後に、rebase
コマンドを使用してcommitA ~ C を1つのコミットにまとめます。
ユースケースとしては、Pull Request
を行う前にコミットをまとめることで、レビューする方が「結局変更点はどこなのか」を把握しやすくなります。
環境
- OS: Windows10
- VSCode: 1.87.0
実際に試す
準備
リポジトリの作成
検証に適当なリポジトリの作成 ⇒ git clone
を行います。
今回はconfirm_rebase
というリポジトリを作成しました。
Git Graph
のインストール
さらに、VSCodeの拡張機能のGit Graph
をインストールしておきます。
ブランチ作成
現段階では、作成したばかりのリポジトリをクローンしてきただけですので、ファイルはREADME.md
しかありません。
この状態で、feature
ブランチを作成し、移動します。
git checkout -b feature
VSCode上で、現在のブランチがfeature
であることが確認できます。
README
の編集を行う
feature
ブランチで、複数のcommitA~Cを作成していきます。
commitA
README.md
を以下のように編集し、コミットします。
# confirm_rebase
commitA
git add README.md
git commit -m "commitA"
VSCode上でコミットログを確認してみます。
画面左下の「Git Graph」をクリックすることで、現在のコミットログを確認することが出来ます。
上記の流れに沿って、commitB, commitC を作成していきます。
commitB
# confirm_rebase
commitA
commitB
git add README.md
git commit -m "commitB"
commitC
# confirm_rebase
commitA
commitB
commitC
git add README.md
git commit -m "commitC"
上記のように、commitA ~ commitC が作成できているのが確認できます。
git rebase
を行う
いよいよコミットをまとめる時が来ました。
その次に、まとめたいコミットの1つ前のコミット上で右クリックをします。
今回は commitA ~ commitC を1つにしたいので、main/origin
上で右クリックを行います。
するとこのようにメニューが表示されますので、Rebase curent branch on this Commit...
をクリックします。
以下のようなメニューが表示されますので、
①「Launch Interactive Rebase in new Terminal」にチェックを入れる
②「Yes, rebase」をクリックする。
ターミナルに以下のような rebase
に関する出力が表示されます。
上3行に、これまでに行ったコミット一覧が表示されています。
それぞれの頭に pick
と記述されておりますが、残したいコミット以外を pick
⇒ s
に変更する必要があります。
以下は commitA
のみ残す場合の例です。
# 変更前
pick 903955e commitA
pick f9a18c1 commitB
pick c1c0de0 commitC
# 変更後
pick 903955e commitA
s f9a18c1 commitB
s c1c0de0 commitC
しかし、この状態でターミナル上に何か入力しようとしても、できません。
そこで、「i」を押下し「挿入モード」にすることで、編集ができます。
ここまでできましたら、「Esc」キーを押すことで、「挿入モード」を解除できます。
さらに「:wq」と入力し、エンターを押下します。
図のように、これまでに行ったコミットの際のコメントが全て表示されております。
(「commitA」~ 「commitC」)
先ほどと同様に、まとめるコミット以外のコメントの先頭に「#」を付けて、コメントアウトします。
この状態で、再度「:wq」と入力し、エンターを押下します。
すると以下のような表示がされ、rebase
が完了します。
[detached HEAD fbdce57] commitA
Date: Thu Mar 7 14:38:44 2024 +0900
1 file changed, 6 insertions(+), 1 deletion(-)
Successfully rebased and updated refs/heads/feature.
Git Graph
を見てみますと、ちゃんとコミットが1つにまとまっているのが確認できます。
リモート環境に反映したい場合は、以下の push
コマンドを行います。
git push -f
お疲れ様でした。
最後に
git rebase
コマンドのうち、コミットをまとめる方法に関してご紹介させていただきました。
内容的に間違っている箇所等ございましたら、ご教示いただけると幸いでございます。
ご紹介
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください:
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area