LoginSignup
22
13

VSCodeでgit rebaseを使ってコミットをまとめる

Last updated at Posted at 2024-03-15

はじめに

gitにはrebaseというコマンドが存在し、以下のようなことを行うことが出来ます。

  1. 作業ブランチの親コミットを、最後尾に変更する。
  2. 複数コミットを1つにまとめる。

本記事では「2. 複数コミットを1つにまとめる」をVSCodeを使用して簡単に行う方法をご紹介します。

①例えば以下のように、mainブランチからfeatureブランチを生やすとします。

002_.png

②続いて、featureブランチで以下のような2つのコミットを行いました。

002_new_2_commit.png

③最後に、rebaseコマンドを使用してcommitA ~ C を1つのコミットにまとめます。

003_rebase_commit.png

ユースケースとしては、Pull Requestを行う前にコミットをまとめることで、レビューする方が「結局変更点はどこなのか」を把握しやすくなります。

環境

  • OS: Windows10
  • VSCode: 1.87.0

実際に試す

準備

リポジトリの作成

検証に適当なリポジトリの作成 ⇒ git clone を行います。
今回はconfirm_rebaseというリポジトリを作成しました。

Git Graphのインストール

さらに、VSCodeの拡張機能のGit Graphをインストールしておきます。
image.png

ブランチ作成

現段階では、作成したばかりのリポジトリをクローンしてきただけですので、ファイルはREADME.mdしかありません。
image.png

この状態で、featureブランチを作成し、移動します。

git checkout -b feature

VSCode上で、現在のブランチがfeatureであることが確認できます。
image.png

READMEの編集を行う

featureブランチで、複数のcommitA~Cを作成していきます。

commitA

README.mdを以下のように編集し、コミットします。

README.md
# confirm_rebase
commitA
git add README.md
git commit -m "commitA"

VSCode上でコミットログを確認してみます。
画面左下の「Git Graph」をクリックすることで、現在のコミットログを確認することが出来ます。
画像6.png

上記の流れに沿って、commitB, commitC を作成していきます。

commitB

README.md
# confirm_rebase
commitA

commitB
git add README.md
git commit -m "commitB"

commitC

README.md
# confirm_rebase
commitA

commitB

commitC
git add README.md
git commit -m "commitC"

この状態で、再度Git Graphを確認してみます。
image.png

上記のように、commitA ~ commitC が作成できているのが確認できます。

git rebaseを行う

いよいよコミットをまとめる時が来ました。

まずGit Graphを開きます。
image.png

その次に、まとめたいコミットの1つ前のコミット上で右クリックをします。
今回は commitA ~ commitC を1つにしたいので、main/origin上で右クリックを行います。
image.png

するとこのようにメニューが表示されますので、Rebase curent branch on this Commit...をクリックします。
rebase_on_this_commit.png

以下のようなメニューが表示されますので、
①「Launch Interactive Rebase in new Terminal」にチェックを入れる
②「Yes, rebase」をクリックする。
check_rebase.png

ターミナルに以下のような rebase に関する出力が表示されます。
image.png

上3行に、これまでに行ったコミット一覧が表示されています。
それぞれの頭に pick と記述されておりますが、残したいコミット以外を picks に変更する必要があります。

以下は commitA のみ残す場合の例です。

# 変更前
pick 903955e commitA
pick f9a18c1 commitB
pick c1c0de0 commitC

# 変更後
pick 903955e commitA
s f9a18c1 commitB
s c1c0de0 commitC

しかし、この状態でターミナル上に何か入力しようとしても、できません。
そこで、「i」を押下し「挿入モード」にすることで、編集ができます。
image.png

編集後。
image.png

ここまでできましたら、「Esc」キーを押すことで、「挿入モード」を解除できます。
さらに「:wq」と入力し、エンターを押下します。

すると、ターミナルの表示が以下のように変わります。
image.png

図のように、これまでに行ったコミットの際のコメントが全て表示されております。
(「commitA」~ 「commitC」)

先ほどと同様に、まとめるコミット以外のコメントの先頭に「#」を付けて、コメントアウトします。
image.png

この状態で、再度「: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つにまとまっているのが確認できます。
image.png

リモート環境に反映したい場合は、以下の push コマンドを行います。

git push -f

コミットが commitA のみであることが確認できます。
remote.png

お疲れ様でした。

最後に

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

22
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
13