LoginSignup
0
0

More than 3 years have passed since last update.

CI/CDをkatacodaで体験(初心者向け) - Part9(Re-writing History)

Last updated at Posted at 2020-10-20

CI/CD入門

このぺーじでは、katacodaと呼ばれる「ブラウザから無料で勉強用のインスタンスを起動できるWebサービス」を利用してCI/CDを実践します
内容は上記リンクに沿うので、不明点があればそちらへどうぞ

Gitのバージョン管理について - Scenario 9 - Re-writing History

ここでは、CI/CDとして欠かせないGitによるバージョン管理について学習します
このシナリオで学習することをさっと確認する場合は概要を確認
理解に間違い等がございましたら、ぜひご指摘ください

概要

Amending Commit Messages

リポジトリの履歴の可読性を向上させるため、git rebaseを用いて整理する
今回のシナリオはcommitの内容を変更
初期状態のcommit履歴は以下の通り

$ git log --oneline
ESC[33m254883aESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m Final Item
ESC[33mb1a5bb4ESC[m New Item
ESC[33m0c3ff30ESC[m Initial comit of the list

git rebase --interactive --rootでインタラクティブモードでrootユーザとしてレポジトリを編集する
このコマンドを打ち込むと、以下のようなVimが立ち上がる

image.png

今回は"comit"とコメントされているコミットを編集するので以下のようにrewordを要求しesc,:wq

image.png

すると新たに以下のようなVimが立ち上がる

image.png

ここで、"reword"要求のcommitメッセージの変更が可能
今回は以下の通り、comit->commitに変更

image.png

terminalに戻ってきたら、変更が反映されている

$ git rebase --interactive --root
[detached HEAD d1cc84f] Initial commit of the list
 Date: Tue Oct 20 07:21:12 2020 +0000
 1 file changed, 5 insertions(+)
 create mode 100644 list.html
Successfully rebased and updated refs/heads/master.
$ git log --oneline
ESC[33m8081e1dESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m Final Item
ESC[33mc6dc2adESC[m New Item
ESC[33md1cc84fESC[m Initial commit of the list   //"comit"->"commit"

Squash Commits

続いてのシナリオでは、複数のcommitをひとつにまとめる
リポジトリの初期状態は以下の通り

$ git log --oneline
ESC[33m1cf8e31ESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m TODO
ESC[33ma340728ESC[m TODO
ESC[33m901fe75ESC[m TODO
ESC[33m6b4db09ESC[m TODO
ESC[33mfbf4a5dESC[m TODO
ESC[33m52204d0ESC[m TODO
ESC[33mf8f4e01ESC[m TODO
ESC[33m260d2cbESC[m TODO
ESC[33m3a1f752ESC[m Final Item
ESC[33mf74f00dESC[m New Item
ESC[33mfabfbbaESC[m Initial comit of the list
$ git rebase --interactive HEAD~8

今回は前のcommitに別のcommitを融合するのでsquash/sに要求を変更

image.png

その後、以下のように一つ目のcommitメッセージのみを残して保存

image.png

[detached HEAD d957dad] TODO
 Date: Tue Oct 20 07:43:38 2020 +0000
 1 file changed, 8 insertions(+)
 create mode 100644 TODO
Successfully rebased and updated refs/heads/master.
$ git log --oneline
ESC[33md957dadESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m TODO
ESC[33m3a1f752ESC[m Final Item
ESC[33mf74f00dESC[m New Item
ESC[33mfabfbbaESC[m Initial comit of the list

commitメッセージが"TODO"一つに変更されていることを確認

Re-order Commits

続いてのシナリオでは、commitの順序を入れ替える
リポジトリの初期状態は以下の通り

$ git log --oneline
ESC[33m356b8fdESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m Adding File 1
ESC[33maa0b258ESC[m Adding File 2
ESC[33md957dadESC[m TODO
ESC[33m3a1f752ESC[m Final Item
ESC[33mf74f00dESC[m New Item
ESC[33mfabfbbaESC[m Initial comit of the list
$ git rebase --interactive HEAD~2

今回は、"pick"要求のままでよいが、順序のみを入れ替える

Successfully rebased and updated refs/heads/master.
$ git log --oneline
ESC[33md49ad2bESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m Adding File 2
ESC[33mb533037ESC[m Adding File 1
ESC[33md957dadESC[m TODO
ESC[33m3a1f752ESC[m Final Item
ESC[33mf74f00dESC[m New Item
ESC[33mfabfbbaESC[m Initial comit of the list

Split Commit

続いてのシナリオでは、commitの分割を行う
リポジトリの初期状態は以下の通り

$ git log --oneline
ESC[33me957a8bESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m Adding Fil
ESC[33m6141321ESC[m Adding File 1
ESC[33mb150469ESC[m Adding File 2
ESC[33m2f349e4ESC[m TODO
ESC[33me5a591fESC[m TODO
ESC[33mf7de1a0ESC[m TODO
ESC[33m5637843ESC[m TODO
ESC[33m0c4df92ESC[m TODO
ESC[33m846e96dESC[m TODO
ESC[33mec5bac6ESC[m TODO
ESC[33m69440bcESC[m TODO
ESC[33me5197fdESC[m Final Item
ESC[33mdbef64cESC[m New Item
ESC[33md6dc0e6ESC[m Initial comit of the list
$ git rebase --interactive HEAD~1

image.png

今回はrebaseeditを要求

image.png

下記の結果の通り、一時的にrebaseが停止

Stopped at e957a8b...  Adding File 3 and File 4
You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue
$ git reset HEAD^   //分割commitをリセット
$ git add file3.txt
$ git commit -m "File 3"
[detached HEAD f491f57] File 3
 1 file changed, 1 insertion(+)
 create mode 100644 file3.txt
$ git add file4.txt
$ git commit -m "File 4"
[detached HEAD 67edd65] File 4
 1 file changed, 1 insertion(+)
 create mode 100644 file4.txt
$ git rebase --continue   //一時停止していたrebaseを再度実行
Successfully rebased and updated refs/heads/master.
$ git log --oneline
ESC[33m67edd65ESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m File 4
ESC[33mf491f57ESC[m File 3
ESC[33m6141321ESC[m Adding File 1
ESC[33mb150469ESC[m Adding File 2
ESC[33m2f349e4ESC[m TODO
ESC[33me5a591fESC[m TODO
ESC[33mf7de1a0ESC[m TODO
ESC[33m5637843ESC[m TODO
ESC[33m0c4df92ESC[m TODO
ESC[33m846e96dESC[m TODO
ESC[33mec5bac6ESC[m TODO
ESC[33m69440bcESC[m TODO
ESC[33me5197fdESC[m Final Item
ESC[33mdbef64cESC[m New Item
ESC[33md6dc0e6ESC[m Initial comit of the list

上記の結果の通り、rebaseを一時停止している間に対象のcommitをリセットしその内容を通常通り、commitすることでcommitの分割を実現

0
0
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
0
0