Upgrade to Pro — share decks privately, control downloads, hide ads and more …

演習:Gitの応用操作 / 05-git-advanced

演習:Gitの応用操作 / 05-git-advanced

Avatar for kaityo256

kaityo256 PRO

March 04, 2026
Tweet

More Decks by kaityo256

Other Decks in Education

Transcript

  1. 2 36 今回の目標 • git amendによりコミットが変更されることを確認する • git mergeの衝突を解決する •

    git rebaseにより歴史を改変する • git rebaseの衝突を解決する • git bisectを使ってみる
  2. 3 36 課題1 – Step 1 リポジトリのクローン github cd cd

    github git clone https://github.com/cpss2026-git/amend-sample.git cd amend-sample github amend-sample ホームディレクトリ Git管理された ディレクトリ ここがカレントディレクトリに
  3. 4 36 課題1 – Step 2 git log --oneline initial

    commit updates README.md updates README.md updaets README.md main HEAD 歴史の確認
  4. 5 36 課題1 – Step 3 コミットの保存 initial commit updates

    README.md updates README.md updaets README.md main HEAD original_main git branch original_main 現在のコミットに別名をつけておく
  5. 6 36 課題1 – Step 4 コミットメッセージの修正 git commit --amend

    -m "updates README.md" initial commit updates README.md updates README.md updaets README.md main HEAD original_main updates README.md
  6. 7 36 課題1 – Step 5 git log --oneline 歴史の確認

    initial commit updates README.md updates README.md updates README.md main HEAD 修正されていることを確認
  7. 8 36 課題1 – Step 6 git log --all --graph

    --oneline 歴史が分岐したことを確認 initial commit updates README.md updates README.md updaets README.md main HEAD original_main updates README.md
  8. 9 36 課題2 – Step 1 リポジトリのクローン cd cd github

    git clone https://github.com/cpss2026-git/merge-sample.git cd merge-sample github merge-sample ここがカレントディレクトリに
  9. 10 36 課題2 – Step 2 ブランチの作成 git branch knock

    origin/knock main HEAD knock ブランチの確認 git branch -vva main HEAD origin/knock origin/knock origin/knockの指すコミットに knockブランチを作成
  10. 11 36 課題2 – Step 3 差分確認 main HEAD knock

    git diff knock poetry.txt poetry.txt コミット間を比較 ここに差分を検出
  11. 12 36 課題2 – Step 4 マージ main HEAD knock

    衝突 git merge knock マージの中断 git merge --abort main HEAD knock このプロセスでpoetry.txtが どのように変化したか調べる
  12. 13 36 課題2 – Step 5 マージ git merge knock

    main HEAD knock 衝突 衝突の解決とコミット git add poetry.txt git commit -m "knock" potery.txtをエディタで修正
  13. 14 36 課題2 – Step 6 main HEAD knock git

    log --all --graph --oneline マージされた「歴史」を確認
  14. 15 36 課題3 – Step 1 リポジトリのクローン cd cd github

    git clone https://github.com/cpss2026-git/rebase-history-sample.git cd rebase-history-sample github rebase-history-sample ここがカレントディレクトリに
  15. 17 36 課題3 – Step 3 ブランチの作成 git branch start

    origin/start 二人が目を覚ます アイスがまだある アイスが消えた ボブが登校 main HEAD start 歴史改変の起点にする
  16. 19 36 課題3 – Step 5 改変された歴史の確認 git log --oneline

    二人が目を覚ます アイスがまだある アイスが消えた ボブが登校
  17. 20 36 課題4 – Step 1 リポジトリのクローン cd cd github

    git clone https://github.com/cpss2026-git/rebase-conflict-sample.git cd rebase-conflict-sample github rebase-conflict-sample ここがカレントディレクトリに
  18. 21 36 課題4 – Step 2 main HEAD branch origin/branch

    ブランチの準備 git switch -c branch origin/branch origin/branchの指すコミットにbranchというブランチを作成し、 カレントブランチをそこへ移動
  19. 22 36 課題4 – Step 3 歴史の確認 git log --all

    --graph --oneline main HEAD branch m1 m2 m3 f1 f2 f3
  20. 24 36 課題4 – Step 5 main m1 m2 m3

    f1 f2 f3 f1’ f2’ f3’ 状態の確認 git status HEAD HEADは「最後にリベースがうまくいったコミット」を指している (detached HEAD)
  21. 25 36 課題4 – Step 6 main m1 m2 m3

    f1 f2 f3 f1’ f2’ f3’ HEAD エディタで衝突状態にあるファイル「text1.txt」を修正し、保存する
  22. 26 36 課題4 – Step 7 解決をGitに伝える git add text1.txt

    git commit -m "f2" main m1 m2 m3 f1 f2 f3 f1’ f2’ f3’ HEAD Gitが自動で作ることができなかった このコミットを手動で作った
  23. 27 36 課題4 – Step 8 リベースの続行 git rebase --continue

    main m1 m2 m3 f1’ f2’ f3’ HEAD branch リベースが最後まで実行され、detached HEAD状態が解消される
  24. 28 36 課題4 – Step 9 歴史の確認 git log --oneline

    --graph main m1 m2 m3 f1’ f2’ f3’ HEAD branch もともと分岐していた歴史が一本道になり、 mainからbranchへfast-forwardマージが可能になった
  25. 29 36 課題5 Step 1 リポジトリのクローン cd cd github git

    clone https://github.com/cpss2026-git/bisect-sample.git cd bisect-sample github bisect-sample ここがカレントディレクトリに
  26. 30 36 課題5 Step 2 $ ./evenodd.sh 1 odd $

    ./evenodd.sh 2 even evenodd.sh 与えられた整数が偶数か奇数かを判定するコード 想定する動作 実際の出力を確認し、バグがあることを確認
  27. 31 36 課題5 Step 3 main origin/root HEAD branch git

    switch root origin/rootからrootブランチを作成し、カレントブランチをrootに変更
  28. 32 36 課題5 Step 4 $ ./evenodd.sh 1 odd $

    ./evenodd.sh 2 even 動作が正しいことを確認 カレントブランチをmainに戻す git switch main main HEAD
  29. 33 36 課題5 Step 5-7 git bisect start main root

    git bisectの実行 はじめてバグが入ったコミット このタイミングでバグ挿入 Good Bad
  30. 34 36 課題5 Step 8 bug git branch bug コミットハッシュ

    バグが入った直後のコミットにブランチを付与 git bisect reset git bisect モードを抜ける
  31. 35 36 課題5 Step 9 git bisect start main root

    git bisect run ./test.sh スクリプトを用いた自動二分探索 test.sh evenodd.shをテストし 動作が正しければ終了コード0を 正しくなければ1を 返すテストスクリプト test.shを利用して自動で二分探索を実施
  32. 36 36 課題5 Step 10 bug git switch bug バグが初めて入ったコミットにスイッチ

    この二つのコミットの差分を調べる git diff HEAD^