Git:rebase , squash, タグ

git rebase コマンド

リベースコマンドを実行すると、コミットの履歴をキレイに整えることができる。
例、コミット1 を親に持つ、コミット2, コミット3 があるとする。
・コミット2:ブランチ名:main
・コミット3:ブランチ名:feature

$ git branch feature
$ git rebase main

コミット3は、コミット3' に変わり、かつ、コミット2 を親コミットにもつことになる

上記のように、feature ブランチにいる状態で、main ブランチをリベースして、取り込むと、コミット履歴が1列にキレイになる。

コミット1 <- コミット2(ブランチ main) <- コミット3'(ブランチ feature)

また、以下を実行すると、Fast-Forward になり、main ブランチと feature ブランチが同じコミット持つことになる。

$ git switch main
$ git merge feature
やってはいけないこと

GitHub に push したコミットを rebase するのは、NG!!!
もし、GitHub に push した後、修正したいことが思いついたのであれば、
新しくコミットをし直して、修正すること。

merge と rebase の使い分け

push していない状態で、別のブランチの変更を取り入れたい場合は、git rebaseを実行してもよい。
あとは、開発チームのルールに則って使い分ける。

  • merge のメリットは、コミットが残るから、遡って修正しやすい。

  • ただ、ブランチが大量発生して、履歴の管理が難しくもなる。

  • rebase のデメリットは、コンフリクトの際に、複数のコンフリクトが発生する。


コミットを分割する
1. `git rebase -i HEAD~3`

pick commitID1 "AAAAAAA"
pick commitID2 "NNNNNN"
pick commitID3 "index.html と second.htmlを追加"

↓ pick をedit に変更する

pick commitID1 "AAAAAAA"
pick commitID2 "NNNNNN"
edit commitID3 "index.html と second.htmlを追加"

そしたら、以下、1~6まで順に実行し完了!

  1. $ git reset HEAD^

  2. $ git add index.html

  3. $ git commit -m "index.htmlを追加"

  4. $ git add second.html

  5. $ git commit -m "second.htmlを追加"

  6. $ git rebase --continue


squash:そのコミットと、それの直前のコミットを 1つにまとめる
1. `git rebase -i HEAD~3`

pick commitID1 "AAAAAAA"
pick commitID2 "NNNNNN"
pick commitID3 "XXXXXXX"

↓pick をsquash に変更する

pick commitID1 "AAAAAAA"
squash commitID2 "NNNNNN"
squash commitID3 "XXXXXXX"

タグ

  • タグの一覧を 全て 表示する

$ git tag

  • タグの一覧表示を絞る場合:-l(エル)オプションを使う

例:2023年5月 中のタグを表示したい場合:$ git tag -l "202305"

タグ付け方法:リリースポイントにタグ付けするのが通説
  • $ git tag -a [タグ名] [コミット名] -m "メッセージ内容"

    • -m 以降は省略可。ただし、省略するとエディタが立ち上がる。
$ git tag -a 20230501_01 a00jsvc2 -m "hoge piyo foo"
  • タグのデータを表示:git show [タグ名]
$ git show 20230501_01
タグを GitHub(リモートリポジトリ)に、送信する
  • メリット:例えば、GitHubにて、そのタグのソースコードをダウンロードできたりする。

  • $ git push [リモート名] [タグ名]:指定したタグを送信する。

  • $ git push [リモート名] --tagsGitHubにない、全てのタグを送信する。

$ git push origin 20230501_01
  • 確認場所:GitHub -> Code -> release -> Tags