GitHubの続きをします😤
今回はスカッシュです!!
コミットIDを使って、エディタでスカッシュしていきます😊
ースカッシュー
コミットを一つにまとめる
【準備】
1.練習用のリポジトリを作成
GitHubで新しいリモートリポジトリを作成します(今回はsample0218)
2.ローカルリポジトリを作成します
3.新規ブランチを作成(masterブランチ)
4.リポジトリを関連付ける
このコマンドは、ローカルリポジトリとリモートリポジトリを関連付けるために使用されます
- リモートリポジトリの名前: origin
- リモートリポジトリのURL: https://github.com/gunkoa/sample0218
※私が練習をしやすいように、リモートリポジトリの名前「gunkoa」を「origin」に変更しました
5.追跡ブランチを設定する
このコマンドは、ローカルリポジトリの master ブランチを、リモートリポジトリの origin ブランチにプッシュし、同時にリモートリポジトリの master ブランチの追跡ブランチをローカルリポジトリの master ブランチに設定します
◎追跡ブランチとは
ローカルリポジトリのブランチとリモートリポジトリのブランチを関連付けるものです
追跡ブランチを設定すると、以下のメリットがあります
- git pull コマンドを実行するだけで、リモートリポジトリの変更をローカルリポジトリに取り込むことができます。
- git status コマンドを実行すると、リモートリポジトリの最新情報をローカルリポジトリで確認することができます。
6.ファイルを作成
以下の内容で README.txt ファイルを作成。ステージ→コミットをする
ここまでの作業で、2時間もかかってしまいました💦笑
ここからは、スカッシュを実行していきます!
スカッシュの実践
1.ファイルを作成
以下の内容で feature.md ファイルを新規作成。ステージ→コミットをする
2.ファイルを作成
以下の内容で bugfix.md ファイルを作成。ステージ→コミットをする
3.以下の内容でfinishファイルを作成。ステージ→コミットをする
これからfeatureブランチの3つのコミットを1つにまとめて(スカッシュして)、master ブランチの README.txtを追加 というコミットの後に配置するため、以下の手順を実行します
4.スカッシュ操作
featureブランチにいる状態で、コマンドで git rebase -i HEAD~<コミット数>を打ちます
今回は、feature ブランチの最新の3つのコミットをインタラクティブリベースでスカッシュします
エディタが開くので、スカッシュしたいコミットの前にある pick を squash または s に変更します
ただし、最初のコミットは pick のままにしておきます
エディタで変更を保存し閉じるとスカッシュ操作が開始し、自動的に再度エディタが開きます
そこに、スカッシュされるコミットのメッセージを編集するプロンプトが表示されます
しかし、私は間違えてコミットのメッセージを編集せずにエディタを閉じてしまいました😅
そのため、再度エディタを開くためにこちらのコマンドを打ちます
エディタが再度開き、スカッシュされるコミットのメッセージを編集するプロンプトが表示されました
通常、すべてスカッシュされるコミットのメッセージが表示されるので、ここで必要な情報を含む1つのメッセージにまとめることができます
新しいコミットメッセージを編集し、変更を保存するとエディタが閉じます
(今回は「新機能を追加できました」にします)
スカッシュ操作が完了し、新しいコミットメッセージが設定されました
これで feature ブランチの最新の3つのコミットが1つにスカッシュされました!
ここからは、feature ブランチの変更を master ブランチにスカッシュ(1つのコミットにまとめ)をします
5.master ブランチにチェックアウトし、feature ブランチの変更を master ブランチに統合します
スカッシュされた変更をコミットします
ここでエラーが出てしまいました😱😱
原因をChatGPTに聞き、抜粋⇓
’’メッセージの最後の部分 nothing to commit, working tree clean は、現在の作業ツリーにコミットするための新しい変更がないことを示しています。
つまり、あなたが feature ブランチで何らかの変更(ファイルの追加、変更、削除など)を行い、それをステージングエリアに追加した後でなければ、新しいコミットを作成することはできません。
したがって、このメッセージは、新しいコミットを作成しようとしましたが、現在の作業ツリーには新しい変更がないため、コミットは作成されなかったことを示しています。新しいコミットを作成するには、まず何らかの変更を行い、それをステージングエリアに追加する必要があります。’’
ということなので、
feature ブランチにチェックアウトします
新しいファイルを作成。ステージ→コミット
master ブランチにチェックアウトします
featureブランチの新しい変更を、 master ブランチにマージします
スカッシュされた変更を新しいコミットとして master ブランチに追加します
先程featureブランチで新しく作成したファイルを、masterブランチにもマージします!
Git Graphで確認すると.......
スカッシュとマージができました!!!😭✨
ちなみに、コミットIDを使ってエディタでスカッシュをする他にも下記のやり方があるそうですが、安全面を考えてこちらのやり方は操作しないほうがいいのかなとかんじました!
git merge --squashで実行するスカッシュ
「git merge --squash」まとめ
- 「git merge --squash」**は、ページをまとめる。
- メリット: 見た目が綺麗になる。
- デメリット: 綺麗にまとまるが、後から「やっぱりあれが良かった!」と思っても、元に戻すのが難しい。
- 「viを使ってコミットIDを指定」**は、コミットを写し書きするようなイメージ
- メリット: 元々の状態は残るので、いつでも元に戻せる。
- デメリット: 手間がかかる。