Slide 1

Slide 1 text

1 29 演習:Gitの操作(応用編) 慶應義塾大学理工学部物理情報工学科 渡辺 物理情報工学ソフトウェア開発演習

Slide 2

Slide 2 text

2 29 • git amendによりコミットが変更されることを確認する • git mergeの衝突を解決する • git rebaseにより歴史を改変する • git rebaseの衝突を解決する • git bisectを使ってみる

Slide 3

Slide 3 text

3 29 リポジトリのクローン ディレクトリの作成 github cd mkdir github cd github git clone https://github.com/appi-github/amend-sample.git cd amend-sample ホームディレクトリに移動してから githubディレクトリを作成 github amend-sample ホームディレクトリ Git管理された ディレクトリ ここがカレントディレクトリに

Slide 4

Slide 4 text

4 29 git log --oneline initial commit updates README.md updates README.md updaets README.md main HEAD 歴史の確認

Slide 5

Slide 5 text

5 29 コミットの保存 initial commit updates README.md updates README.md updaets README.md main HEAD original_main git branch original_main 現在のコミットに別名をつけておく

Slide 6

Slide 6 text

6 29 コミットメッセージの修正 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

Slide 7

Slide 7 text

7 29 git log --oneline 歴史の確認 initial commit updates README.md updates README.md updates README.md main HEAD 修正されていることを確認

Slide 8

Slide 8 text

8 29 git log --all --graph --oneline 歴史が分岐したことを確認 initial commit updates README.md updates README.md updaets README.md main HEAD original_main updates README.md

Slide 9

Slide 9 text

9 29 リポジトリのクローン cd cd github git clone https://github.com/appi-github/merge-sample.git cd merge-sample github merge-sample ここがカレントディレクトリに

Slide 10

Slide 10 text

10 29 ブランチの作成 git branch knock origin/knock main HEAD knock ブランチの確認 git branch -vva main HEAD origin/knock origin/knock origin/knockの指すコミットに knockブランチを作成

Slide 11

Slide 11 text

11 29 差分確認 main HEAD knock git diff knock poetry.txt poetry.txt コミット間を比較 ここに差分を検出

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

13 29 マージ git merge knock main HEAD knock 衝突 衝突の解決とコミット git add poetry.txt git commit -m "knock" potery.txtをエディタで修正

Slide 14

Slide 14 text

14 29 main HEAD knock git log --all --graph --oneline マージされた「歴史」を確認

Slide 15

Slide 15 text

15 29 リポジトリのクローン cd cd github git clone https://github.com/appi-github/rebase-history-sample.git cd rebase-history-sample github rebase-history-sample ここがカレントディレクトリに

Slide 16

Slide 16 text

16 29 二人が目を覚ます アイスがまだある アイスが消えた ボブが登校 歴史の確認 git log --oneline

Slide 17

Slide 17 text

17 29 ブランチの作成 git branch start origin/start 二人が目を覚ます アイスがまだある アイスが消えた ボブが登校 main HEAD knock 歴史改変の起点にする

Slide 18

Slide 18 text

18 29 歴史改変 git rebase -i start

Slide 19

Slide 19 text

19 29 改変された歴史の確認 git log --oneline 二人が目を覚ます アイスがまだある アイスが消えた ボブが登校

Slide 20

Slide 20 text

20 29 リポジトリのクローン cd cd github git clone https://github.com/appi-github/rebase-conflict-sample cd rebase-conflict-sample github rebase-conflict-sample ここがカレントディレクトリに

Slide 21

Slide 21 text

21 29 main HEAD branch origin/branch ブランチの準備 git switch -c branch origin/branch origin/branchの指すコミットにbranchというブランチを作成し、 カレントブランチをそこへ移動

Slide 22

Slide 22 text

22 29 歴史の確認 git log --all --graph --oneline main HEAD branch m1 m2 m3 f1 f2 f3

Slide 23

Slide 23 text

23 29 リベースの実行 git rebase main main HEAD branch

Slide 24

Slide 24 text

24 29 main m1 m2 m3 f1 f2 f3 f1’ f2’ f3’ 状態の確認 git status HEAD HEADは「最後にリベースがうまくいったコミット」を指している (detached HEAD)

Slide 25

Slide 25 text

25 29 main m1 m2 m3 f1 f2 f3 f1’ f2’ f3’ HEAD エディタで衝突状態にあるファイル「text1.txt」を修正し、保存する

Slide 26

Slide 26 text

26 29 解決をGitに伝える git add text1.txt git commit -m "f2" main m1 m2 m3 f1 f2 f3 f1’ f2’ f3’ HEAD Gitが自動で作ることができなかった このコミットを手動で作った

Slide 27

Slide 27 text

27 29 リベースの続行 git rebase --continue main m1 m2 m3 f1’ f2’ f3’ HEAD branch リベースが最後まで実行され、detached HEAD状態が解消される

Slide 28

Slide 28 text

28 29 歴史の確認 git log --oneline --graph main m1 m2 m3 f1’ f2’ f3’ HEAD branch もともと分岐していた歴史が一本道になり、 mainからbranchへfast-forwardマージが可能になった

Slide 29

Slide 29 text

29 29 git bisectを使った犯人捜し