ゆっくり中級git
ゆっくり中級git
作業ログ
なんとなくいつ何をやったかをメモしておく。
第五回作業開始 2025-03-27 (木)
めっちゃ時間あいたが、第五回を作り始める。
とりあえず第三回と第四回の内容を思い出すべく1.5倍速で見直す。
cherry-pickの説明からか。diffはどうしようかなぁ。
チェリーピック
- Git - git-cherry-pick Documentation
- Git - Revision Selection diffのバージョン指定周り
第五回に向けたメモ 2024-06-03 (月)
第五回は履歴整理をやっていきたい。
- cherry-pick
- diff
第5回のスクリプトメモ
- 分離: reset+add(GUIアプリ)
- 並び替え: cherry-pick
- 潰し: reset+commit(+amend)
まで解説した。次にそれぞれの具体的な手順を見ていく所。コミットの分離は「最後のコミットを分離」にあとで変更したい。 amendのスペルミスは直す
その場合、まずこのコミットにインデックスを戻す。 インデックスを戻すのはresetで、 これは3つのツリーを考えるのがいいのだった。 HEADとインデックスを戻すのはmixedのreset。 この場合はHEADの一つ前なので、
git reset HEAD^
を実行すればいい。
そして、 修正だけをインデックスに加える。 これにはGUIのgitクライアントを使えばいい。 ここではgit-guiのスクリーンショットを貼っておく。 こうして、コミットする この時、機能追加はワーキングツリーに残ったままになる。 次に機能追加をインデックスに加えてコミットする。 こうすれば一つめのコミットが修正のみに、 二つ目のコミットが機能追加のみになる。 ワーキングツリーはこの操作で最初から最後まで変化していない事に注目してくれ。
まとめると、コミットを「分離」するには、
- mixedのresetでインデックスを戻す
- 一つめのコミットに含めたいものだけインデックスにadd
- commit
- 残りをインデックスにaddしてcommit
となる。
並び替え 並び替えは、cherry-pickを順番に適用していく。 cherry-pickはコミットのIDを指定すると、 そのコミットの差分をパッチとしてapplyして同じコッミットメッセージでコミットする。 これは単なるパッチなのでコンフリクトしたり、 元と違う行にapplyされてしまって期待通りにならない可能性がある。 これを使って、並び替えは
- git logでコミットIDの一覧を出す(gitkなどでもよい)
- git resetとgit checkoutで並び替えをはじめたい最初の履歴に戻す(後述)
- git cherry-pickを順番にしてく
- 並び替え前とgit diffしてちゃんと元通りな事を確認する(後述)
潰す 複数のコミットを一つにするのは、 resetとamendを使えば良い。 amendは現在のインデックスのツリーでHEADのコミットのツリーを置きかえる。 普段使う時は、 HEADのコミットに追加しわすれていた変更を あとから追加する時とか、 コミットメッセージを変更する時に使う機能だが、 より厳密にはHEADのコミットブジェクトを 修正する機能だ。 コミットオブジェクトといえば ツリーのIDとコミットメッセージで、 ツリーのIDの修正はいつも インデックスのIDに置き換えるだけ。 これを用いると、
- 潰したいコミットまでHEADをreset
- git commit -amend
とすると、結果としては二つの変更の両方を含んだ状態が一つのコミットになる。 なお、二つと言わず、最後n個のコミットを一つに潰すのは一気に行える。 この辺はコミットオブジェクトが単にツリーのIDとparentを含んでるもので、 インデックスのツリーをどういう状態にしてamendすれば狙ったコミットになるのか、 と考える方が簡単。
第四回、完成 2024-06-02 (日)
なかなか完成しないのでもくもく会に参加して作ってきた。少しはみ出たが家帰ってきて推敲して無事完成。制作3ヶ月はさすがに掛かりすぎだなぁ。
第四回、インデックスの中身の解説まで 2024-04-11 (木)
奄美からの帰りの空港で作業。 まだ図などはあまり用意せずに説明だけでインデックスの中身の解説が終わるくらいまでやった。 次に三つのツリー(resetの話)をやればおしまいの予定。現在までで11分くらいなので結構いい感じに終わりそう。
あと二日くらい作業すれば終わるかな。
第四回、作り始め 2024-03-09 (土)
第四回はインデックスの話をする予定。出来たらresetの話もしたいが、どこまでやれるか良く分かってないので、 とりあえずインデックスの解説を作ってみる事から始めてみる。 たぶんワーキングツリーとresetの話まで、くらいと思っているが。
第三回、公開 2024-03-04 (月)
そろそろ燃え尽きてきたので公開する事に。まぁ良く頑張った。
朝に公開してサーフィンして戻ってきたがあんまり反響無いな。月曜の朝には見ないか。 ブランチの解説は中級gitとしては重要なところなので、ここが終われば山場は越えたかな、という感じはする。 次回のインデックスまでが基礎編というか、そのあとの話で使う道具をそろえる段階なので、 4回までは早く完成させたいなぁ。
第三回、ブランチとHEADの解説が終わった 2024-03-02 (土)
HEADの方はどうもしっくりこなくて一度作り直したが、まぁこんなもんかな、という仕上がりにはなった。 あとはブランチとHEADを合わせてブランチをいろいろ移動する話で終わりだが、 ここは何を説明するかまだ考えてないので今日はこのくらいにしておくかな。
第三回も、あと一日くらい作業すれば完成かな。
第三回、ブランチの説明を作っている 2024-02-24 (土)
.gitディレクトリの中の解説が終わって、ブランチのファイルの中身くらいまで解説を作った。 第三回まで来ると結構重要な話が出来るな。 ブランチが単なるコミットIDが入ったファイルだ、 と理解すると、gitらしくなってくるよな。
第二回完成、公開 2024-02-21 (水)
見直す気力が尽きたので公開。でも第二回も結構いい出来なんじゃないか。 もうちょっと短く出来る気もするんだが、短くて分かりにくいより余計に長くて分かりやすい方がゆっくり的だな、と思う。
第二回のコミットオブジェクトの解説を作り始め 2024-02-13
単にコミットオブジェクトを解説する動画を作ってみたが、やはり分かりにくい。 前回のツリーも最初単に解説するだけだと全然分からなかったので、 最初に何も考えずに解説を作るとこうなっちゃうんだよなぁ。
今の所はいったん分かりにくい解説を作ってから作り直す、しか、 分かりやすいコンテンツを作る方法が確立出来てないんだが、もうちょっとなんとかならんもんか。
これはネームとか絵コンテとか的な何かなんだよな、たぶん。
一方でこういうのを作っては作り直して、と割り切ってしまうのも、 コーディング重視のプログラマ的には正しい気もする。 結局作ってみないと分からない事は作ってみて考える方がいい、 なんか無駄な気もするが意外と無駄ではない、という事もあるよなぁ。
そんな事をブログにした>解説動画はどうもスクラップアンドビルドでしか良く出来ない - なーんだ、ただの水たまりじゃないか
夜に続きを作る。だいぶ前半のイメージは固まってきた。
第ゼロ回、一回を公開 2024-02-12
第ゼロ回は結構前に完成してたのだが、 とりあえず技術的な内容を本当にゆっくりで分かりやすく解説出来るのかわかってなかったので、 第一回でそれが出来るというのを確かめてから公開しようと思っていた。
かなり試行錯誤したが、分かりやすいものが作れたので公開することに。
見た人の数はそこまででも無いが、見た人からの評価はおおむね好評。
第一回でコミットと履歴まで行きたかったが、ちょっと長すぎるので断念。 その結果第一回だけだと普段のgitの操作とのかかわりが少ないのだけれど、 割と最後まで見てもらえてそう。やはりゆっくり動画としての面白さがあると、最後まで見てもらいやすいよな。
作る前に思ってた事
ゆっくりkotlinを作ろうとしたが、kotlinはちょっと先が長いので、もう少し短いので反響を見たい気がする。 という事でgitで何か作れないかな、と思っている。>git
入門は結構世の中にあるし、本当に学びたければ公式のPro Gitを読めばこれも良く書けている。 やるならPro Git側かなぁ、という気もする。 ただそこまで自分も詳しい訳では無いので、もうちょっとケーススタディ的な事をやりたい気がする。
こういう時どうする?的なのをやってみるかな。
- ローカルで開発していたものをgithubに置こうとして、最初にライセンスを作ってしまった
- 履歴の整理
それよりもconflictを中心にコミットを解説する方がいいかもしれん。