今日も学習したことをまとめていきます!!
今回は、リバートとリベースについてです!!
ーリバートー
過去のコミットを修正し、その履歴を残せるため、安心してコードを以前の状態に戻せる
間違った変更をしたとき、リバートを使うとそのコミットを消すことはできますが、
ただ削除するだけでなく、その間違いと、それを直したことは、記録として残ります
わかりやすく書きましたが、私はこれを理解するのにとても時間がかかりました😅
しかし、現場で実際にどのようにリバートを使われているのかを調べたことで少しずつイメージが掴めてきました
新しくリリースしたソフトウェアにバグが見つかったとき、そのバグが存在していない過去の安定した状態に戻してから、バグ修正を行うことがあるそうで、ここでリバートを使うとバグのない状態から安全に作業を進めることができます
また、新しく追加した機能が何か問題を引き起こした場合や、あとからその機能が不要になる場合もリバートを使います
その機能を追加したコミットをリバートすることで、機能を安全に削除し、コードを元の状態に戻すことができます
このような状況でリバートを使うことで、問題のある変更を取り消しつつ、何が起きたかを履歴に残すことができるので、あとから問題の原因を追跡したり、同じ間違いを繰り返さないようにすることができるということなんですね!!
ここからは、sample0211フォルダのokonomi.txtを使って実際にリバートします😊
- 適当な変更をする
- 変更をコミットする
- コミットハッシュ値を確認する
- リバートを実行する
- エディターを編集
- コミット履歴を確認する
1. 適当な変更をする
何かファイルに変更を加えます
例えば、テキストファイルに「こんにちは」という一行を追加して保存します
2. 変更をコミットする
変更をステージしてコミットします
3.コミットハッシュ値を確認する
コミットした後、git logを使ってそのコミットのハッシュを確認します
ここで表示される最新のコミットのハッシュ値をメモします
メモしたコミットハッシュを使い、git revertコマンドでリバートを実行します
5.エディターを編集
エディターが開くので、もしコミットメッセージを編集したい場合は、メッセージを打ち込み編集してキーボードで保存します
【保存の仕方】
Control key+O[書き込み] ⇒ Enter key ⇒ Control key+X[終了]
6.コミット履歴を確認する
リバートが完了すると、新しいコミットが
リポジトリの履歴に追加され、git logで確認することができます
リバートが成功していれば、最新のコミットとして「Revert "元のコミットメッセージ"」というメッセージのコミットが表示されます
このコマンドを実行すると、d6e88f06b04eae9b0f103c1dfbe865041d1a87d7(あいさつのIDコマンド)という過去の変更を消すための新しい変更が記録されました
これで、コードは間違いをした前の状態に戻りますが、何があったのかは履歴に残るので、後で確認することができます
ーリベースー
あるブランチの変更を別のブランチに移すための機能
これは、ブランチの変更履歴を整理したり、変更が衝突したときにその衝突を解消するために使う
例えば、新しい機能を作っているbuttonブランチで作業をしていて、その間にmainブランチに新しい変更が加えられたとします
この新しい変更をbuttonブランチにも反映させたいとき、リベースを使います
リベースを使うと、buttonブランチはmainブランチの最新の状態から新しく始まり、その上にbuttonブランチで行った変更が適用され、buttonブランチはmainブランチの最新の変更を取り込んだ状態になります
ただし、リベースは過去の変更履歴を書き換える操作なので、他の人と共有しているブランチに対しては慎重に使う必要がありそうです
他の人と共有しているブランチに対してリベースを行うと、他の人の作業を混乱させる可能性があるので、慣れないうちはマージを使ったほうがいいとのことです
では、ここでも引き続きokonomi.txtファイルを使って実践します!
- 新しいブランチを作成する
- ファイルを変更する
- 変更をコミットする
- メインブランチに切り替える
- メインブランチのファイルを変更する
- 変更をコミットする
- add-ingredientブランチに切り替える
- リベースを実行する
1.新しいブランチを作成する
まず、新しい機能を追加するためのブランチ(ここではadd-buttonとします)を作成して移動します
2.ファイルを変更する
次に、okonomi.txtに新しい材料を追加します
3.変更をコミットする
変更をステージ⇒コミットします
4.メインブランチに切り替える
mainブランチに切り替えます
5.メインブランチのファイルを変更する
mainブランチでokonomi.txtを変更します
6.変更をコミットする
変更をステージ⇒コミットします
7.add-buttonブランチに切り替える
再びadd-buttonブランチに切り替えます
8.リベースを実行する
mainブランチの変更を、add-buttonブランチに適用します
すると、コンフリクト発生!!
mainブランチと、add-buttonブランチのokonomi.txtファイルで、同じ行、同時に別々の修正をしたため、コンフリクトが発生です
(いろいろと変更しすぎました😅)
これから、コンフリクトを解消します
⇓
変更をステージ
コンフリクトを解消したら、リベースを続行します
リバートの時と同様、エディターが開いたので、メッセージを書いて終了します
これで、リベースが続行されてコンフリクトが解消されました
ということで、1.新しいブランチを作成するはスキップして、
ファイルを変更する
変更をコミットする
メインブランチに切り替える
メインブランチを変更する
変更をコミットする
add-ingredientブランチに切り替える
リベースを実行する
を実行します!
すると、またコンフリクト発生!!😱
Chat GPTに原因を聞いたところ、
「一つのコミットでコンフリクトが解消されても、次のコミットで再びコンフリクトが発生することがあります」
だそうです😭
もう一度コンフリクト解消します!
コンフリクト解消したあとの、add-buttonブランチのokonomi.txt
メインブランチに切り替える
メインブランチのファイルを変更する
変更をコミットする
add-ingredientブランチに切り替える
リベースを実行する
をもう一度繰り返し!
…するとまさかの、コンフリクト発生してしまいました😢😢😢😢
原因が分からず2時間以上頭をかかえました…
先が進まないのでパスタさんに助けを求めます💦
「変更のマージ」をクリックする
画面に”現在のマシンを適用”と、”受信中”が表示されるため、今回は”現在のマシンを適用”を選択する
画面の真ん中あたりにある「マージの完了」のボタンをクリック!
コンフリクト解消されました✨
最後に、リベースを続行して完了させることができました😭😭
流れがぐちゃぐちゃですみません😱
リベースはエラーばかりでかなりの時間がかかってしまいましたが、たくさん失敗してどんどん成長していきたいです!!