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まで順に実行し完了!
$ git reset HEAD^
$ git add index.html
$ git commit -m "index.htmlを追加"
$ git add second.html
$ git commit -m "second.htmlを追加"
$ 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(リモートリポジトリ)に、送信する
$ git push [リモート名] [タグ名]
:指定したタグを送信する。$ git push [リモート名] --tags
:GitHubにない、全てのタグを送信する。
$ git push origin 20230501_01
- 確認場所:GitHub -> Code -> release -> Tags