CI/CDをkatacodaで体験(初心者向け) - Part9(Re-writing History)
CI/CD入門
このぺーじでは、katacodaと呼ばれる「ブラウザから無料で勉強用のインスタンスを起動できるWebサービス」を利用してCI/CDを実践します
内容は上記リンクに沿うので、不明点があればそちらへどうぞ
Gitのバージョン管理について - Scenario 9 - Re-writing History
ここでは、CI/CDとして欠かせないGitによるバージョン管理について学習します
このシナリオで学習することをさっと確認する場合は概要を確認
理解に間違い等がございましたら、ぜひご指摘ください
概要
git rebase --interactive (--root)
でレポジトリの履歴を変更可能- リポジトリの変更方法の流れ
git rebase --interactive (--root) (hash)
- 対象のバージョンに対しての操作(コマンド等)を要求
- 具体的な変更内容の記述
- e.g ) commitコメントの変更
- e.g ) commitの統合
- e.g ) commitの順序入れ替え
- e.g ) commitの分割
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が立ち上がる
今回は"comit"とコメントされているコミットを編集するので以下のようにreword
を要求しesc
,:wq
すると新たに以下のようなVimが立ち上がる
ここで、"reword"要求のcommitメッセージの変更が可能
今回は以下の通り、comit
->commit
に変更
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
に要求を変更
その後、以下のように一つ目のcommitメッセージのみを残して保存
[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
今回はrebase
のedit
を要求
下記の結果の通り、一時的に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の分割を実現
Author And Source
この問題について(CI/CDをkatacodaで体験(初心者向け) - Part9(Re-writing History)), 我々は、より多くの情報をここで見つけました https://qiita.com/tem-individual/items/46204962af22f10db502著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .