Your SlideShare is downloading. ×
0
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
git 初めの一歩
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

git 初めの一歩

807

Published on

git の社内勉強会資料 …

git の社内勉強会資料

オリジナル資料
https://github.com/wbcchsyn/git-first-step

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
807
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. git 初めの一歩 February 20, 2014
  • 2. 目次 1 ローカルで使う 使ってみる branch を使用する 過去の履歴を活用する レポジトリの状態を確認する 2 リモートレポジトリを使う 使ってみる 複数人で開発する 更新が競合したら 3 その他 4 最後に
  • 3. introduction 目的 git を使い、man を読むための最低限の知識をつ ける 対象者 git を触った事が有るけれど、良く分からない人 注意 git はデフォルト設定で動作していると仮定 (設定次第では、この通りには動作しない) 注意 git の best practice ではありません
  • 4. ローカルで使う introduction 本章のスコープ workspace 作業ディレクトリ cached (index) staging 環境 repository git の本体
  • 5. init (ローカル) 使ってみる git を使い始める準備をする $ $ $ $ $ mkdir ˜/local rep cd ˜/local rep1 git init git config --global user.name ’Your Name’ git config --global user.email ’your@address’ 1 この後、しばらくは ˜/local rep で作業します
  • 6. 中で起きている事 使ってみる $ mkdir ˜/local rep $ cd ˜/local rep ここで作成するディレクトリが workspace
  • 7. 中で起きている事 使ってみる workspace $ mkdir ˜/local rep $ cd ˜/local rep ここで作成するディレクトリが workspace
  • 8. 中で起きている事 使ってみる workspace $ git config --global user.name ’Your Name’ $ git config --global user.email ’your@address’ home directory 直下の config file を編集 workspace, cached, repository には影響無し
  • 9. 中で起きている事 使ってみる workspace $ git init ワークスペース直下に .git ディレクトリを作成し、その中に cached や repository を初め git に必要な物を作成する
  • 10. 中で起きている事 使ってみる workspace repository cached (index) $ git init ワークスペース直下に .git ディレクトリを作成し、その中に cached や repository を初め git に必要な物を作成する
  • 11. 中で起きている事 使ってみる workspace repository cached (index) $ git init 今後、.git ディレクトリを直接触るか、git 以外のコマンドは、 基本的に workspace の作業と思ってよい。
  • 12. add, commit 使ってみる repository にファイル、ディレクトリを追加する workspace を更新 $ touch a b c
  • 13. add, commit 使ってみる repository にファイル、ディレクトリを追加する workspace を cached に反映 $ git add a b
  • 14. add, commit 使ってみる repository にファイル、ディレクトリを追加する cached を repository に反映 $ git commit -m ’Add a and b.’
  • 15. 中で起きている事 使ってみる workspace cached (index) repository
  • 16. 中で起きている事 使ってみる workspace repository cached (index) $ touch a b c .git ディレクトリは触っていないので、workspace のみ変更
  • 17. 中で起きている事 使ってみる workspace abc repository cached (index) $ touch a b c .git ディレクトリは触っていないので、workspace のみ変更
  • 18. 中で起きている事 使ってみる workspace abc repository cached (index) $ git add a b workspace から cached へファイル、ディレクトリをコピー
  • 19. 中で起きている事 使ってみる workspace abc repository cached (index) ab $ git add a b workspace から cached へファイル、ディレクトリをコピー
  • 20. 中で起きている事 使ってみる workspace abc repository cached (index) ab $ git commit -m ’Add a and b.’ cached を取り込み、message を添えて commit を作成
  • 21. 中で起きている事 使ってみる workspace abc repository Add a and b. cached (index) ab ab $ git commit -m ’Add a and b.’ cached を取り込み、message を添えて commit を作成
  • 22. 中で起きている事 使ってみる workspace abc repository cached (index) ab Add a and b. ab master $ git commit -m ’Add a and b.’ また、初回 commit 時のみ master branch を作成 (branch: commit へのリンクの様な物)
  • 23. 中で起きている事 使ってみる workspace abc repository cached (index) ab Add a and b. ab master←HEAD $ git commit -m ’Add a and b.’ 最初、HEAD は master へ向いている (HEAD: repository 内の現在の commit を指すリンクの様 な物) (この場合、HEAD はリンクのリンクとなる)
  • 24. git add コマンド補足 使ってみる git add path1 [path2 [path3 ...]]2 で複数の path を一度に workspace へコピー可能 path が ディレクトリの場合、そのディレクトリ以下の ファイルを再起的に git add する workspace のトップディレクトリで git add . と行うと全 ファイルを git add できる 2 [ ] でくくってあるパラメータは省略可能という意味
  • 25. git commit コマンド補足 git commit でエディタが立ち上がり、そこで commit message を入 力すると新 commit が作成される git commit -m message でエディタを立ち上げずに commit message を指定する 事も可能 message の無い commit を作成する事はできない
  • 26. mv, rm 使ってみる repository からファイルの削除、移動 (リネーム) workspace, cached でリネーム $ git mv a d
  • 27. mv, rm 使ってみる repository からファイルの削除、移動 (リネーム) workspace, cached で削除 $ git rm b
  • 28. mv, rm 使ってみる repository からファイルの削除、移動 (リネーム) cached を repository に反映 $ git commit -m ’Rename a to d and delete b.’
  • 29. 中で起きている事 使ってみる repository workspace abc cached (index) ab Add a and b. ab master←HEAD
  • 30. 中で起きている事 使ってみる repository workspace abc cached (index) ab Add a and b. ab master←HEAD $ git mv a d workspace, cached の両方でファイルを移動 (リネーム)
  • 31. 中で起きている事 使ってみる repository workspace bcd cached (index) b d Add a and b. ab master←HEAD $ git mv a d workspace, cached の両方でファイルを移動 (リネーム)
  • 32. 中で起きている事 使ってみる repository workspace bcd cached (index) b d Add a and b. ab master←HEAD $ git rm b workspace, cached の両方からファイルを削除
  • 33. 中で起きている事 使ってみる repository workspace cd cached (index) d Add a and b. ab master←HEAD $ git rm b workspace, cached の両方からファイルを削除
  • 34. 中で起きている事 使ってみる repository workspace cd cached (index) d Add a and b. ab master←HEAD $ git commit -m ’Rename a to d and delete b.’ cached を取り込み、message を添えて、現在の HEAD を親と する commit を作成
  • 35. 中で起きている事 使ってみる repository workspace cd cached (index) d Rename a to d and delete b. d Add a and b. ab master←HEAD $ git commit -m ’Rename a to d and delete b.’ cached を取り込み、message を添えて、現在の HEAD を親と する commit を作成
  • 36. 中で起きている事 使ってみる repository workspace cd cached (index) d Rename a to d and delete b. d Add a and b. ab master←HEAD $ git commit -m ’Rename a to d and delete b.’ HEAD が branch を指している時 (普通はこの状態) は、 その branch の向き先を新しい commit へ変更
  • 37. 中で起きている事 使ってみる repository workspace cd cached (index) d Rename a to d and delete b. d master←HEAD Add a and b. ab $ git commit -m ’Rename a to d and delete b.’ HEAD が branch を指している時 (普通はこの状態) は、 その branch の向き先を新しい commit へ変更
  • 38. 中で起きている事 使ってみる repository workspace cd Rename a to d and delete b. cached (index) d d master←HEAD Add a and b. ab $ git commit -m ’Rename a to d and delete b.’ HEAD は master へ向いているので、 結果的に新しい commit へ移動
  • 39. git mv コマンド補足 使ってみる git mv [-f] source destination で source を destination に移動 通常の mv コマンドのように、destination がディレクト リの場合、source は destination 以下のディレクトリに 移動 -f をつけると、既存のファイルを上書き出来る (-f が無い場合、エラーとなる)
  • 40. git rm コマンド補足 使ってみる git rm [-r] [-f] path1 [path2 [path3 ...]] で複数の path を削除可能 通常の rm コマンドのように、ディレクトリを削除する 場合は -r オプションが必要 workspace と cached の内容が違う時などは、誤操作防止 のために git rm はエラーになる そのような場合、-f を使うと正常に削除可能
  • 41. ここまでのまとめ 使ってみる git を始めたい場合、git init を実行 git add は workspace から cached へコピー git mv は workspace と cached 両方で移動、リネーム git rm は workspace と cached 両方で削除
  • 42. ここまでのまとめ 使ってみる git commit は cached に message を添えて commit を作成 HEAD が branch を向いている時は branch を新しい commit へ向ける branch は commit へのリンクの様な物 HEAD は現在の commit へのリンクの様な物 通常、HEAD は branch を指している事が多い
  • 43. branch (一覧、作成) branch を使用する branch の一覧表示、作成 現在の branch を確認 $ git branch * master
  • 44. branch (一覧、作成) branch を使用する branch の一覧表示、作成 新 branch の作成 $ git branch develop
  • 45. branch (一覧、作成) branch を使用する branch の一覧表示、作成 現在の branch を確認 $ git branch * master develop
  • 46. branch (一覧、作成) branch を使用する branch の一覧表示、作成 repository の更新を行ってみる $ git add c $ git commit -m ’Add c.’
  • 47. 中で起きている事 branch を使用する repository workspace cd cached (index) d Rename a to d and delete b. master←HEAD Add a and b.
  • 48. 中で起きている事 branch を使用する repository workspace cd cached (index) d Rename a to d and delete b. master←HEAD Add a and b. $ git branch 現在の branch 一覧を表示
  • 49. 中で起きている事 branch を使用する repository workspace cd cached (index) d Rename a to d and delete b. master←HEAD Add a and b. $ git branch * master * は HEAD が向いている branch の印
  • 50. 中で起きている事 branch を使用する repository workspace cd cached (index) d Rename a to d and delete b. master←HEAD Add a and b. $ git branch develop HEAD と同じ commit を指す branch を作成
  • 51. 中で起きている事 branch を使用する repository workspace cd cached (index) d Rename a to d and delete b. master←HEAD develop Add a and b. $ git branch develop HEAD と同じ commit を指す branch を作成
  • 52. 中で起きている事 branch を使用する repository workspace cd cached (index) d Rename a to d and delete b. master←HEAD develop Add a and b. $ git branch * master develop
  • 53. 中で起きている事 branch を使用する repository workspace cd cached (index) d Rename a to d and delete b. master←HEAD develop Add a and b. $ git add c c を cached へコピー
  • 54. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Rename a to d and delete b. master←HEAD develop Add a and b. $ git add c c を cached へコピー
  • 55. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Rename a to d and delete b. master←HEAD develop Add a and b. $ git commit -m ’Add c.’ cached を取り込み、message を添えて、現在の HEAD を親と する commit を作成
  • 56. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Add c. Rename a to d and delete b. master←HEAD develop Add a and b. $ git commit -m ’Add c.’ cached を取り込み、message を添えて、現在の HEAD を親と する commit を作成
  • 57. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Add c. Rename a to d and delete b. master←HEAD develop Add a and b. $ git commit -m ’Add c.’ HEAD が branch を指している時は その branch の向き先を新しい commit へ変更
  • 58. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Add c. master←HEAD Rename a to d and delete b. develop Add a and b. $ git commit -m ’Add c.’ HEAD が branch を指している時は その branch の向き先を新しい commit へ変更
  • 59. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Add c. master←HEAD Rename a to d and delete b. develop Add a and b. $ git commit -m ’Add c.’ HEAD が指しているのは master だけなので、develop は放置
  • 60. git branch コマンド補足 (一覧、作成) branch を使用する git branch [-a] で現在の branch 一覧を表示 -a オプションをつけると、remote branch3 も表示する git branch branch-name [start-point] で start-point をさす branch を作成 start-point は branch, HEAD, ハッシュ値 4 等で指定 start-point のデフォルト値は HEAD 3 4 後述 後述
  • 61. checkout branch を使用する HEAD の切り替えと、会わせて workspace と cached の変更 workspace のファイル確認 $ ls cd
  • 62. checkout branch を使用する HEAD の切り替えと、会わせて workspace と cached の変更 HEAD の切り替え実施 $ git checkout develop
  • 63. checkout branch を使用する HEAD の切り替えと、会わせて workspace と cached の変更 workspace のファイル再確認 $ ls d
  • 64. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Add c. cd master←HEAD Rename a to d and delete b. d develop
  • 65. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Add c. cd master←HEAD Rename a to d and delete b. d develop $ ls cd
  • 66. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Add c. cd master←HEAD Rename a to d and delete b. d develop $ git checkout develop HEAD のリンクの向き先を develop に変更
  • 67. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Add c. cd master Rename a to d and delete b. d develop←HEAD $ git checkout develop HEAD のリンクの向き先を develop に変更
  • 68. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Add c. cd master Rename a to d and delete b. d develop←HEAD $ git checkout develop あわせて、workspace や cached に新旧 HEAD の差分も適用
  • 69. 中で起きている事 branch を使用する repository workspace d cached (index) d Add c. cd master Rename a to d and delete b. d develop←HEAD $ git checkout develop あわせて、workspace や cached に新旧 HEAD の差分も適用
  • 70. 中で起きている事 branch を使用する repository workspace d cached (index) d Add c. cd master Rename a to d and delete b. d develop←HEAD $ ls d
  • 71. git checkout コマンド補足 branch を使用する git checkout commit で HEAD の commit へ切り替え workspace, cached も会わせて変更 commit は branch, tag5 , ハッシュ値 6 等で指定 リリース時以外は HEAD はどこかの branch を指してい る状態にすると良い workspace や cached が clean でない場合 7 は 情報が失われる可能性があるので注意 5 後述 後述 7 未 commit のファイルがある場合 6
  • 72. merge branch を使用する 他のブランチの更新を取り込む develop を更新 $ touch e $ git add e $ git commit -m ’Add e.’
  • 73. merge branch を使用する 他のブランチの更新を取り込む master に develop の更新を反映 $ git checkout master $ git merge develop
  • 74. 中で起きている事 branch を使用する repository workspace d cached (index) d Add c. master Rename a to d and delete b. develop←HEAD
  • 75. 中で起きている事 branch を使用する repository workspace d cached (index) d Add c. master Rename a to d and delete b. develop←HEAD $ touch e $ git add e $ git commit -m ’Add e.’
  • 76. 中で起きている事 branch を使用する repository workspace de Add c. master cached (index) de Add e. develop←HEAD Rename a to d and delete b. $ touch e $ git add e $ git commit -m ’Add e.’
  • 77. 中で起きている事 branch を使用する repository workspace de Add c. master cached (index) de Add e. develop←HEAD Rename a to d and delete b. $ git checkout master
  • 78. 中で起きている事 branch を使用する repository workspace cd Add c. master←HEAD cached (index) cd Add e. develop Rename a to d and delete b. $ git checkout master
  • 79. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Add c. master←HEAD Add e. develop Rename a to d and delete b. $ git merge develop HEAD と develop の共通の先祖の commit を探す “Rename a to d and delete b.” という commit が相当
  • 80. 中で起きている事 branch を使用する repository workspace cd cached (index) cd Add c. master←HEAD Add e. develop Rename a to d and delete b. $ git merge develop branch が分岐してから develop で行われた 全変更を workspace に適用
  • 81. 中で起きている事 branch を使用する repository workspace cde cached (index) cd Add c. master←HEAD Add e. develop Rename a to d and delete b. $ git merge develop branch が分岐してから develop で行われた 全変更を workspace に適用
  • 82. 中で起きている事 branch を使用する repository workspace cde cached (index) cd Add c. master←HEAD Add e. develop Rename a to d and delete b. $ git merge develop cached に適用
  • 83. 中で起きている事 branch を使用する repository workspace cde cached (index) cde Add c. master←HEAD Add e. develop Rename a to d and delete b. $ git merge develop cached に適用
  • 84. 中で起きている事 branch を使用する repository workspace cde cached (index) cde Add c. master←HEAD Add e. develop Rename a to d and delete b. $ git merge develop commit の作成
  • 85. 中で起きている事 branch を使用する repository workspace cde Merge branch ’develop’ master←HEAD Add e. cached (index) cde Add c. develop Rename a to d and delete b. $ git merge develop commit の作成
  • 86. git merge コマンド補足 branch を使用する 実際には branch の状態によって merge 後の repository の状態は異なる (ここで挙げた挙動は一例) コマンド実施後に message 入力画面が出てくる事と 出てこない事があるが 今回の範囲を超えるので詳細は割愛 いずれの場合でも、最新状態では 2 個の branch の 変更は全て含まれる
  • 87. branch (削除) branch を使用する 既存の branch を削除 現在の branch 一覧 $ git branch develop * master
  • 88. branch (削除) branch を使用する 既存の branch を削除 branch 削除 $ git branch -d develop
  • 89. branch (削除) branch を使用する 既存の branch を削除 現在の branch 一覧 $ git branch * master
  • 90. 中で起きている事 branch を使用する repository workspace cde cached (index) cde Merge branch ’develop’ master←HEAD Add c. Add e. develop Rename a to d and delete b.
  • 91. 中で起きている事 branch を使用する repository workspace cde cached (index) cde Merge branch ’develop’ master←HEAD Add c. Add e. develop Rename a to d and delete b. $ git branch develop * master
  • 92. 中で起きている事 branch を使用する repository Merge branch ’develop’ workspace cde master←HEAD cached (index) cde Add c. Add e. Add e. develop Rename a to d and delete b. $ git branch -d develop develop branch を削除 (commit は消えない)
  • 93. 中で起きている事 branch を使用する repository Merge branch ’develop’ workspace cde master←HEAD cached (index) cde Add c. Add e. Rename a to d and delete b. $ git branch -d develop develop branch を削除 (commit は消えない)
  • 94. 中で起きている事 branch を使用する repository workspace cde cached (index) cde Merge branch ’develop’ master←HEAD Add c. Add e. Rename a to d and delete b. $ git branch * master
  • 95. branch (削除) branch を使用する git branch -d branch1 [branch2 [branch3 ] ...] で複数 branch の削除が可能 branch を削除しても、commit は消えない branch を削除すると、その commit が 見つけにくくなる場合がある 8 そのような場合、誤操作防止の為に git branch -d はエラーとなる git branch -D を使用すると、上記の場合でも branch の強制削除可能 8 後述
  • 96. ここまでのまとめ branch を使用する git branch は branch の一覧、作成、削除 git checkout は HEAD の切り替え 会わせて、workspace, cached も変更 git merge は他の branch の変更を取り入れる branch の作成、削除で commit が 作成、削除される事は無い
  • 97. log 過去の履歴を活用する 過去の履歴を閲覧
  • 98. log 過去の履歴を活用する 過去の履歴を閲覧 $ git log --graph * commit 86ba5efc1bce4f65f517eb80a3cc5c21113bc637 | Merge: ac24086 365850a | | Author: Your Name <your@address> | | Date: Wed Jan 1 02:42:46 2014 +0900 || || Merge branch ’develop’ || | * commit 365850a9b09bb6fbcfc3f762b630380053b46575 | | Author: Your Name <your@address> | | Date: Wed Jan 1 02:42:32 2014 +0900 || || Add e. || ...
  • 99. log 過去の履歴を活用する 過去の履歴を閲覧 git log は less を使用しているので、長い場合は j,k で上下移 動、q で終了
  • 100. log 過去の履歴を活用する 過去の履歴を閲覧 — commit 86ba5efc1bce4f65f517eb80a3cc5c21113bc637 Merge: ac24086 365850a Author: Your Name <your@address> Date: Wed Jan 1 02:42:46 2014 +0900 Merge branch ’develop’ — これが一つの commit
  • 101. log 過去の履歴を活用する 過去の履歴を閲覧 — commit 86ba5efc1bce4f65f517eb80a3cc5c21113bc637 Merge: ac24086 365850a Author: Your Name <your@address> Date: Wed Jan 1 02:42:46 2014 +0900 Merge branch ’develop’ — “commit” の横に書いてあるのが、その commit のハッシュ値 (リンクでは無い、commit の本当の名前として使用)
  • 102. log 過去の履歴を活用する 過去の履歴を閲覧 — commit 86ba5efc1bce4f65f517eb80a3cc5c21113bc637 Merge: ac24086 365850a Author: Your Name <your@address> Date: Wed Jan 1 02:42:46 2014 +0900 Merge branch ’develop’ — 最後が commit message
  • 103. git log コマンド補足 過去の履歴を活用する git log --graph [commit] で commit の先祖を表示 commit は branch, HEAD, ハッシュ値等で指定 commit のデフォルトは HEAD ハッシュ値はその commit の本名の要な物 git branch や git checkout で使用可能 (自信が無い場合は、git checkout で commit のハッシュ 値を指定する事はやめた方が無難) git log で簡単に調べられるのは各 branch やその先祖 例えば、現在の最新状態の branch を削除すると最新 commit を見つける事が困難になる (git branch -d でエラーが出るのはそのような場合)
  • 104. reset 過去の履歴を活用する branch と HEAD を一度に切り替える (良く、過去のバージョンに戻すのに使用) 戻したいバージョン (例えば、“Add e.” という commit ) の commit のハッシュ値を確認 $ git log --graph ... (commit のハッシュ値 commit する度に異なるので注意) 今回は 365850a9b09bb6fbcfc3f762b630380053b46575 とする
  • 105. reset 過去の履歴を活用する branch と HEAD を一度に切り替える (良く、過去のバージョンに戻すのに使用) 準備 $ git branch for soft $ git branch for mixed $ git branch for hard
  • 106. reset 過去の履歴を活用する branch と HEAD を一度に切り替える (良く、過去のバージョンに戻すのに使用) HEAD だけ古いバージョンに戻す $ git checkout for soft $ git reset --soft 36589 9 重複が無ければ、hash 値は先頭 4 文字以上で大丈夫
  • 107. reset 過去の履歴を活用する branch と HEAD を一度に切り替える (良く、過去のバージョンに戻すのに使用) HEAD と cached を古いバージョンに戻す $ git checkout for mixed $ git reset --mixed 3658
  • 108. reset 過去の履歴を活用する branch と HEAD を一度に切り替える (良く、過去のバージョンに戻すのに使用) HEAD, cached, workspace の全てを古いバージョンに戻す $ git checkout for hard $ git reset --hard 3658
  • 109. reset 過去の履歴を活用する branch と HEAD を一度に切り替える (良く、過去のバージョンに戻すのに使用) テスト環境後始末 $ git checkout master $ git branch -d for soft for mixed for hard
  • 110. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master←HEAD cached (index) cde Add e. Add c. de
  • 111. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master←HEAD for soft for mixed for hard cached (index) cde Add e. Add c. $ git branch for soft $ git branch for mixed $ git branch for hard de
  • 112. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master←HEAD for soft for mixed for hard cached (index) cde Add e. Add c. $ git checkout for soft de
  • 113. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master for soft←HEAD for mixed for hard cached (index) cde Add e. Add c. $ git checkout for soft de
  • 114. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master for soft←HEAD for mixed for hard cached (index) cde Add e. Add c. de $ git reset --soft 3658 HEAD だけ変更する (HEAD が branch を指している時は branch を変更する)
  • 115. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master for mixed for hard cached (index) cde Add e. de Add c. for soft←HEAD $ git reset --soft 3658 HEAD だけ変更する (HEAD が branch を指している時は branch を変更する)
  • 116. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master for mixed for hard cached (index) cde Add e. de Add c. $ git checkout for mixed for soft←HEAD
  • 117. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master for mixed←HEAD for hard cached (index) cde Add e. de Add c. $ git checkout for mixed for soft
  • 118. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master for mixed←HEAD for hard cached (index) cde Add e. de Add c. $ git reset --mixed 3658 cached と HEAD を変更する for soft
  • 119. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master for hard cached (index) de Add e. de Add c. $ git reset --mixed 3658 cached と HEAD を変更する for soft for mixed←HEAD
  • 120. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master for hard cached (index) de Add e. de Add c. $ git checkout for hard for soft for mixed←HEAD
  • 121. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master for hard←HEAD cached (index) cde Add e. de Add c. $ git checkout for hard for soft for mixed
  • 122. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master for hard←HEAD cached (index) cde Add e. de Add c. for soft for mixed $ git reset --hard 3658 workspace, cached, HEAD を変更する
  • 123. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace de cde master cached (index) de Add e. de Add c. for soft for mixed for hard←HEAD $ git reset --hard 3658 workspace, cached, HEAD を変更する
  • 124. 中で起きている事 過去の履歴を活用する repository Merge branch ’develop’ workspace cde cde master←HEAD cached (index) cde Add e. Add c. $ git checkout master $ git branch -d for soft for mixed for hard de
  • 125. git reset コマンド補足 過去の履歴を活用する git reset [--soft | --mixed | --hard] [comit] で HEAD, branch の切り替えと (オプションによって) workspace や cached の変更を実施 オプションのデフォルトは --mixed、 commit は branch, HEAD, ハッシュ値等で指定 commit のデフォルトは HEAD git reset とだけ実行すると、HEAD は変わらず cached が HEAD と同じ状態になる 間違えて git add してしまった場合などに使用 HEAD を切り替えるので、git reset は git checkout と少 し似ている 違いは、branch も一緒に切り替えるかどうか
  • 126. ここまでのまとめ git log は過去の履歴や commit のハッシュ値を表示 commit のハッシュ値はその commit の名前のように使用 git reset は HEAD の移動や workspace, cached のクリア 等を実施 (オプションによって挙動は異なる)
  • 127. status レポジトリの状態を確認する 現在の cached の状態を確認 workspace, cached の変更 $ touch f g $ git add f $ echo ’test’ >f
  • 128. status レポジトリの状態を確認する 現在の cached の状態を確認 $ git status Changes to be committed: (use ”git reset HEAD <file>...” to unstage) new file: f Changes not staged for commit: (use ”git add <file>...” to update what will be committed) (use ”git checkout -- <file>...” to discard changes in working directory) modified: f Untracked files: (use ”git add <file>...” to include in what will be committed) g
  • 129. status レポジトリの状態を確認する 現在の cached の状態を確認 上から、HEAD, cached 間の差分 Changes to be committed: (use ”git reset HEAD <file>...” to unstage) new file: f
  • 130. status レポジトリの状態を確認する 現在の cached の状態を確認 workspace と cached の差分 Changes not staged for commit: (use ”git add <file>...” to update what will be committed) (use ”git checkout -- <file>...” to discard changes in working directory) modified: f
  • 131. status レポジトリの状態を確認する 現在の cached の状態を確認 cached にも HEAD にも無いファイル Untracked files: (use ”git add <file>...” to include in what will be committed) g
  • 132. status レポジトリの状態を確認する 現在の cached の状態を確認 $ git add f $ git status Changes to be committed: (use ”git reset HEAD <file>...” to unstage) new file: f Untracked files: (use ”git add <file>...” to include in what will be committed) g workspace と cached の差分が無くなる
  • 133. diff レポジトリの状態を確認する workspace, cached, commit 間の差分をパッチレベルで表示 $ git diff workspace と cached の差分を表示 (差分は無いので何も表示されない)
  • 134. diff レポジトリの状態を確認する workspace, cached, commit 間の差分をパッチレベルで表示 $ git diff --cached cached と HEAD の差分を表示 diff --git a/f b/f new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/f @@ -0,0 +1 @@ +test
  • 135. diff レポジトリの状態を確認する workspace, cached, commit 間の差分をパッチレベルで表示 $ git diff 3658 workspace と commit の差分を表示 diff --git a/c b/c new file mode 100644 index 0000000..e69de29 diff --git a/f b/f new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/f @@ -0,0 +1 @@
  • 136. diff レポジトリの状態を確認する workspace, cached, commit 間の差分をパッチレベルで表示 $ git diff 3658 HEAD 3658 と HEAD の差分を表示 diff --git a/c b/c new file mode 100644 index 0000000..e69de29
  • 137. git diff コマンド補足 レポジトリの状態を確認する git diff [--]9 [path1 [path2 [...]]]10 で path の workspace と cached の差分を表示 git diff commit [--] [path1 [path2 [...]]] で path の workspace と commit の差分を表示 commit は HEAD や branch, ハッシュ値等で指定 git diff --cached commit [--] [path1 [path2 [...]]] で path の commit と cached の差分を表示 git diff commit1 commit2 [--] [path1 [path2 [...]]] で path の commit 間の差分を表示 9 10 曖昧さ回避の為のオプション、通常は必要ない path が省略されると、git 管理下の全ファイル
  • 138. ここまでのまとめ レポジトリの状態を確認する git status は workspace, cached, HEAD の状態を確認 git diff は workspace, cached, commit 間の差分を表示 git status はファイルの更新有無のみ、 git diff はパッチレベルの差分 (ファイルの中身) を表示 commit 前に git status で確認するのは良い習慣
  • 139. リモートレポジトリを使う introduction 本章のスコープ local 前章で作成した repository remote local repository から作成した remote repository clone remote repository を clone して作った repository
  • 140. init (リモート) 使ってみる remote repository を用意する remote repository の作成 $ mkdir ˜/remote rep $ cd ˜/remote rep $ git init --bare
  • 141. init (リモート) 使ってみる remote repository を用意する remote repository のエイリアス作成 $ cd ˜/local rep $ git remote add origin ˜/remote rep
  • 142. git init コマンド補足 (リモート) 使ってみる 多くの git server では URI を ssh や https で指定するが それはネットワーク的な問題 repository 自体はこの用法で作成している事も多い この方法で作成した remote repository は workspace が無いので 普通の local repository としては使用不可 その他、git の各種デフォルト設定が異なっている
  • 143. push 使ってみる local branch のコピーを git server に作成 master branch を転送 $ git push origin master
  • 144. push 使ってみる local branch のコピーを git server に作成 develop branch 作成 $ git branch develop
  • 145. push 使ってみる local branch のコピーを git server に作成 master branch の更新 (git add f は git status の説明時に実施済み) $ git commit -m ’Add f.’
  • 146. push 使ってみる local branch のコピーを git server に作成 master branch の再転送 $ git push origin master
  • 147. push 使ってみる local branch のコピーを git server に作成 develop branch の転送 $ git push origin develop
  • 148. 中で起きている事 使ってみる remote local Merge branch ’develop’ master←HEAD Add c. Add e.
  • 149. 中で起きている事 使ってみる remote local Merge branch ’develop’ master←HEAD Add c. Add e. $ git push origin master origin に master branch が有るか確認 (無い)
  • 150. 中で起きている事 使ってみる remote local Merge branch ’develop’ master←HEAD Add c. Add e. $ git push origin master origin に master branch の指す commit をコピー
  • 151. 中で起きている事 使ってみる remote local Merge branch ’develop’ Merge branch ’develop’ master←HEAD master Add c. Add e. Add c. $ git push origin master origin に master branch の指す commit をコピー Add e.
  • 152. 中で起きている事 使ってみる remote local Merge branch ’develop’ Merge branch ’develop’ master←HEAD master Add c. Add e. $ git branch develop Add c. Add e.
  • 153. 中で起きている事 使ってみる remote local Merge branch ’develop’ Merge branch ’develop’ master←HEAD develop master Add c. Add e. $ git branch develop Add c. Add e.
  • 154. 中で起きている事 使ってみる remote local Merge branch ’develop’ Merge branch ’develop’ master←HEAD develop master Add c. Add e. $ git commit -m ’Add f.’ Add c. Add e.
  • 155. 中で起きている事 使ってみる remote local Add f. master←HEAD Merge branch ’develop’ Merge branch ’develop’ develop master Add c. Add e. $ git commit -m ’Add f.’ Add c. Add e.
  • 156. 中で起きている事 使ってみる remote local Add f. master←HEAD Merge branch ’develop’ Merge branch ’develop’ develop master Add c. Add e. Add c. $ git push origin master origin に master branch が有るか確認 (有る) Add e.
  • 157. 中で起きている事 使ってみる remote local Add f. master←HEAD Merge branch ’develop’ Merge branch ’develop’ develop master Add c. Add e. Add c. Add e. $ git push origin master origin の master branch と同じ commit が local の master branch の 先祖か確認 (先祖である)
  • 158. 中で起きている事 使ってみる remote local Add f. master←HEAD Merge branch ’develop’ Merge branch ’develop’ develop master Add c. Add e. Add c. Add e. $ git push origin master origin に master branch をコピー (新しい commit, ファイルの転送と master branch の移動)
  • 159. 中で起きている事 使ってみる remote local Add f. master←HEAD Add f. master Merge branch ’develop’ Merge branch ’develop’ develop Add c. Add e. Add c. Add e. $ git push origin master origin に master branch をコピー (新しい commit, ファイルの転送と master branch の移動)
  • 160. 中で起きている事 使ってみる remote local Add f. master←HEAD Add f. master Merge branch ’develop’ Merge branch ’develop’ develop Add c. Add e. Add c. $ git push origin develop origin に develop branch が有るか確認 (無い) Add e.
  • 161. 中で起きている事 使ってみる remote local Add f. master←HEAD Add f. master Merge branch ’develop’ Merge branch ’develop’ develop Add c. Add e. $ git push origin develop origin に develop branch をコピー (branch の作成のみ) Add c. Add e.
  • 162. 中で起きている事 使ってみる remote local Add f. master←HEAD Add f. master Merge branch ’develop’ Merge branch ’develop’ develop develop Add c. Add e. $ git push origin develop origin に develop branch をコピー (branch の作成のみ) Add c. Add e.
  • 163. git push コマンド補足 使ってみる git push URI source-branch[:destination-branch] で source-branch を URI の destination-branch にコピー destination-branch のデフォルトは source-branch git push URI :destination-branch で URI の destination-branch を削除 (空の branch をコピーすると思えば良い) remote repository の branch を削除しても local repository の branch は残る commit のコピーとは、commit 自身, その先祖の全 commit, 各 commit で必要な全ファイル、ディレクトリ のコピー
  • 164. ここまでのまとめ 過去の履歴を活用する git init --bare で remote repository を作成 git remote は remote repository URI のエイリアスの一覧 表示、作成 git push は remote repository へ local repository のコピー を作成
  • 165. clone 複数人で開発する repository のコピーを作成 clone repository の作成 $ git clone ˜/remote rep ˜/clone rep $ cd ˜/clone rep
  • 166. clone 複数人で開発する repository のコピーを作成 現在の repository 一覧を表示 $ git branch -a * master remotes/origin/HEAD ->origin/master remotes/origin/master remotes/origin/develop
  • 167. clone 複数人で開発する repository のコピーを作成 develop branch の作成 $ git branch develop remotes/origin/develop
  • 168. 中で起きている事 複数人で開発する clone remote Add f. master←HEAD Merge branch ’develop’ develop $ git clone ˜/remote rep ˜/clone rep $ cd ˜/clone rep
  • 169. 中で起きている事 複数人で開発する clone remote Add f. master←HEAD Merge branch ’develop’ develop $ git clone ˜/remote rep ˜/clone rep $ cd ˜/clone rep remote rep の全 branch, HEAD を remote branch としてコピー
  • 170. 中で起きている事 複数人で開発する clone remote Add f. master←HEAD Add f. remotes/origin/master remotes/origin/HEAD Merge branch ’develop’ Merge branch ’develop’ develop remotes/origin/develop $ git clone ˜/remote rep ˜/clone rep $ cd ˜/clone rep remote rep の全 branch, HEAD を remote branch としてコピー
  • 171. 中で起きている事 複数人で開発する clone remote Add f. master←HEAD Add f. remotes/origin/master remotes/origin/HEAD Merge branch ’develop’ Merge branch ’develop’ develop remotes/origin/develop $ git clone ˜/remote rep ˜/clone rep $ cd ˜/clone rep remotes/origin/HEAD を元に master branch を作成
  • 172. 中で起きている事 複数人で開発する clone remote Add f. master←HEAD Add f. master←HEAD remotes/origin/master remotes/origin/HEAD Merge branch ’develop’ Merge branch ’develop’ develop remotes/origin/develop $ git clone ˜/remote rep ˜/clone rep $ cd ˜/clone rep remotes/origin/HEAD を元に master branch を作成
  • 173. 中で起きている事 複数人で開発する clone remote Add f. master←HEAD Add f. master←HEAD remotes/origin/master remotes/origin/HEAD Merge branch ’develop’ Merge branch ’develop’ develop remotes/origin/develop $ git branch -a * master remotes/origin/HEAD ->origin/master remotes/origin/develop remotes/origin/master
  • 174. 中で起きている事 複数人で開発する clone remote Add f. master←HEAD Add f. master←HEAD remotes/origin/master remotes/origin/HEAD Merge branch ’develop’ Merge branch ’develop’ develop remotes/origin/develop $ git branch develop remotes/origin/develop remotes/origin/develop を元に develop branch を作成
  • 175. 中で起きている事 複数人で開発する clone remote Add f. master←HEAD Add f. master←HEAD remotes/origin/master remotes/origin/HEAD Merge branch ’develop’ Merge branch ’develop’ develop develop remotes/origin/develop $ git branch develop remotes/origin/develop remotes/origin/develop を元に develop branch を作成
  • 176. git clone コマンド補足 複数人で開発する git clone URI [directory ] で remote repository の clone を directory に作成 directory のデフォルトは URI の reopsitory 名 git の top directory はいつでも変更してよい git clone 時に指定した URI は、origin というエイリアス で登録される git branch -a で全ての remote branch が閲覧可能 master 以外の必要な branch は git branch branch-name start-point で作成 (remote branch は閲覧専用として使用するべき)
  • 177. fetch 複数人で開発する remote repository の更新を反映 local rep で更新 $ $ $ $ cd ˜/local rep git add g git commit -m ’Add g.’ git push origin master
  • 178. fetch 複数人で開発する remote repository の更新を反映 clone rep に反映 $ cd ˜/clone rep $ git fetch --all -p $ git merge remotes/origin/master
  • 179. 中で起きている事 複数人で開発する remote local clone Add f. master←HEAD Add f. Add f. remotes/origin/master
  • 180. 中で起きている事 複数人で開発する remote local clone Add g. Add f. master←HEAD Add f. Add f. $ cd ˜/local rep $ git add g $ git commit -m ’Add g.’ remotes/origin/master
  • 181. 中で起きている事 複数人で開発する remote local Add g. clone Add g. Add f. master←HEAD Add f. Add f. $ git push origin master remotes/origin/master
  • 182. 中で起きている事 複数人で開発する remote local Add g. clone Add g. Add f. master←HEAD Add f. $ cd ˜/clone rep Add f. remotes/origin/master
  • 183. 中で起きている事 複数人で開発する remote local Add g. clone Add g. Add f. master←HEAD Add f. Add f. remotes/origin/master $ git fetch --all -p remotes 以下の branch を最新版にバージョンアップ
  • 184. 中で起きている事 複数人で開発する remote local Add g. Add g. clone Add g. remotes/origin/master Add f. Add f. Add f. master←HEAD $ git fetch --all -p remotes 以下の branch を最新版にバージョンアップ
  • 185. 中で起きている事 複数人で開発する remote local Add g. clone Add g. Add g. remotes/origin/master Add f. Add f. Add f. master←HEAD $ git merge remotes/origin/master master に remotes/origin/master の更新を適用
  • 186. 中で起きている事 複数人で開発する remote local Add g. clone Add g. Add g. master←HEAD remotes/origin/master Add f. Add f. $ git merge remotes/origin/master master に remotes/origin/master の更新を適用 Add f.
  • 187. ここまでのまとめ 複数人で開発する git clone は remote repository の clone を作成 clone には remote repository の全 branch が remote branch として登録済み remote repository にある branch を local に作成するには git branch を使う git fetch は remote branch を最新状態に更新 remote repository の更新を適用するには fetch の後に、remote branch を merge すれば良い remote repository は読み込み専用で使うべき
  • 188. 同時更新 更新が競合したら local rep と clone rep で同時更新 local rep で更新 $ $ $ $ $ cd ˜/local rep touch h git add h git commit -m ’Add h.’ git push origin master
  • 189. 同時更新 更新が競合したら local rep と clone rep で同時更新 clone rep で更新 $ $ $ $ $ cd ˜/clone rep touch i git add i git commit -m ’Add i.’ git push origin master (失敗)
  • 190. 同時更新 更新が競合したら local rep と clone rep で同時更新 clone rep で local rep の更新を取り込み、再 push $ git fetch --all -p $ git merge remotes/origin/master $ git push origin master
  • 191. 同時更新 更新が競合したら local rep と clone rep で同時更新 local rep に clone rep の更新を取り込む $ cd ˜/local rep $ git fetch --all -p $ git merge remotes/origin/master
  • 192. 中で起きている事 更新が競合したら remote local Add f. master Add f. master clone Add f. master
  • 193. 中で起きている事 更新が競合したら remote local Add f. master $ $ $ $ cd ˜/local rep touch h git add h git commit -m ’Add h.’ Add f. master clone Add f. master
  • 194. 中で起きている事 更新が競合したら remote local clone Add h. master Add f. $ $ $ $ cd ˜/local rep touch h git add h git commit -m ’Add h.’ Add f. master Add f. master
  • 195. 中で起きている事 更新が競合したら remote local clone Add h. master Add f. $ git push origin master Add f. master Add f. master
  • 196. 中で起きている事 更新が競合したら remote local Add h. master clone Add h. master Add f. $ git push origin master Add f. Add f. master
  • 197. 中で起きている事 更新が競合したら remote local Add h. master Add h. master Add f. $ $ $ $ clone cd ˜/clone rep touch i git add i git commit -m ’Add i.’ Add f. Add f. master
  • 198. 中で起きている事 更新が競合したら remote local Add h. master Add h. master Add f. $ $ $ $ cd ˜/clone rep touch i git add i git commit -m ’Add i.’ Add f. clone Add i. master Add f.
  • 199. 中で起きている事 更新が競合したら remote local Add h. master Add h. master Add f. Add f. $ git push origin master origin に master branch が有るか確認 (有る) clone Add i. master Add f.
  • 200. 中で起きている事 更新が競合したら remote local Add h. master clone Add h. master Add f. Add f. Add i. master Add f. $ git push origin master origin の master branch と同じ commit が local の master branch の先祖か確認 (先祖ではない)
  • 201. 中で起きている事 更新が競合したら remote local Add h. master Add h. master Add f. Add f. clone Add i. master Add f. $ git push origin master 無理に push すると “Add h.” という commit が branch から 外れてしまう
  • 202. 中で起きている事 更新が競合したら remote local Add h. master Add h. Add f. clone Add i. master Add f. Add i. master Add f. $ git push origin master 無理に push すると “Add h.” という commit が branch から 外れてしまう
  • 203. 中で起きている事 更新が競合したら remote local Add h. master Add h. master Add f. Add f. $ git push origin master データ損失防止のため、git が失敗させる clone Add i. master Add f.
  • 204. 中で起きている事 更新が競合したら remote local Add h. master Add f. $ git fetch --all -p Add h. master Add f. clone Add i. master Add f.
  • 205. 中で起きている事 更新が競合したら remote local Add h. master Add f. $ git fetch --all -p Add h. master Add f. clone Add h. Add i. master Add f.
  • 206. 中で起きている事 更新が競合したら remote local Add h. master Add f. Add h. master Add f. $ git merge remotes/origin/master clone Add h. Add i. master Add f.
  • 207. 中で起きている事 更新が競合したら remote local clone Merge remote-... Add h. master Add f. Add h. master Add f. $ git merge remotes/origin/master master Add h. Add i. Add f.
  • 208. 中で起きている事 更新が競合したら remote local clone Merge remote-... Add h. master Add h. master Add f. Add f. $ git push origin master origin に master branch が有るか確認 (有る) master Add h. Add i. Add f.
  • 209. 中で起きている事 更新が競合したら remote local clone Merge remote-... Add h. master Add h. master Add f. Add f. master Add h. Add i. Add f. $ git push origin master origin の master branch と同じ commit が local の master branch の先祖か確認 (“Add h.” が相当)
  • 210. 中で起きている事 更新が競合したら remote local clone Merge remote-... Add h. master Add h. master Add f. Add f. $ git push origin master origin に master branch をコピー master Add h. Add i. Add f.
  • 211. 中で起きている事 更新が競合したら remote local clone Merge remote-... Add h. master Merge remote-... master master Add h. Add f. Add i. Add f. $ git push origin master origin に master branch をコピー Add h. Add i. Add f.
  • 212. 中で起きている事 更新が競合したら remote local clone Merge remote-... Add h. master Add f. Merge remote-... master master Add h. Add i. Add f. $ cd ˜/local rep $ git fetch --all -p $ git merge remotes/origin/master Add h. Add i. Add f.
  • 213. 中で起きている事 更新が競合したら remote local clone Merge remote-... Merge remote-... Merge remote-... master master master Add h. Add i. Add f. Add h. Add i. Add f. $ cd ˜/local rep $ git fetch --all -p $ git merge remotes/origin/master Add h. Add i. Add f.
  • 214. 衝突 (一旦停止) 更新が競合したら merge を一旦停止して、解決してから 再 merge 準備 $ cd ˜/local rep $ git branch conflict1 $ git branch conflict2
  • 215. 衝突 (一旦停止) 更新が競合したら merge を一旦停止して、解決してから 再 merge conflict1 で更新 $ $ $ $ git checkout conflict1 echo “conflict1” >> f git add f git commit -m ’Update 1.’
  • 216. 衝突 (一旦停止) 更新が競合したら merge を一旦停止して、解決してから 再 merge conflict2 で更新 $ $ $ $ git checkout conflict2 echo “conflict2” >> f git add f git commit -m ’Update 2.’
  • 217. 衝突 (一旦停止) 更新が競合したら merge を一旦停止して、解決してから 再 merge conflict2 で conflict1 と merge (衝突) $ git merge conflict1
  • 218. 衝突 (一旦停止) 更新が競合したら merge を一旦停止して、解決してから 再 merge merge を一旦停止 $ git merge --abort
  • 219. 衝突 (一旦停止) 更新が競合したら merge を一旦停止して、解決してから 再 merge 衝突しない様に編集、commit してから再度 merge $ $ $ $ vi f git add f git commit -m ’Escape conflict.’ git merge conflict1
  • 220. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Merge remote-tracking branch ...
  • 221. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Merge remote-tracking branch ... $ cd ˜/local rep $ git branch conflict1 $ git branch conflict2
  • 222. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Merge remote-tracking branch ... $ $ $ $ git checkout conflict1 echo “conflict1” >> f git add f git commit -m ’Update1’
  • 223. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Update 1. conflict1 Merge remote-tracking branch ... $ $ $ $ git checkout conflict1 echo “conflict1” >> f git add f git commit -m ’Update1’
  • 224. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Update 1. conflict1 Merge remote-tracking branch ... $ $ $ $ git checkout conflict2 echo “conflict2” >> f git add f git commit -m ’Update2’
  • 225. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Update 1. Update 2. conflict1 conflict2 Merge remote-tracking branch ... $ $ $ $ git checkout conflict2 echo “conflict2” >> f git add f git commit -m ’Update2’
  • 226. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Update 1. Update 2. conflict1 conflict2 Merge remote-tracking branch ... $ git merge conflict1 workspace に無理矢理両方の更新を適用した状態
  • 227. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Update 1. Update 2. conflict1 conflict2 Merge remote-tracking branch ... $ git merge conflict1 workspace に無理矢理両方の更新を適用した状態
  • 228. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Update 1. Update 2. conflict1 conflict2 Merge remote-tracking branch ... $ git merge --abort 前回の git merge を行う前の状態に戻す
  • 229. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Update 1. Update 2. conflict1 conflict2 Merge remote-tracking branch ... $ git merge --abort 前回の git merge を行う前の状態に戻す
  • 230. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Update 1. Update 2. conflict1 conflict2 Merge remote-tracking branch ... $ vi f $ git add f $ git commit -m ’Escape conflict.’ conflict を起こさないように f を修正
  • 231. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Escape conflict. Update 1. conflict2 conflict1 Update 2. Merge remote-tracking branch ... $ vi f $ git add f $ git commit -m ’Escape conflict.’ conflict を起こさないように f を修正
  • 232. 中で起きている事 更新が競合したら repository workspace cdefghi cached (index) cdefghi Escape conflict. Update 1. conflict2 conflict1 Update 2. Merge remote-tracking branch ... $ git merge conflict1 merge 成功
  • 233. 中で起きている事 更新が競合したら repository Merge bra... workspace cdefghi cached (index) cdefghi conflict2 Update 1. Escape conflict. conflict1 Update 2. Merge remote-tracking branch ... $ git merge conflict1 merge 成功
  • 234. 衝突 (解決) 更新が競合したら 衝突をその場で解決 準備 $ cd ˜/local rep $ git branch conflict3
  • 235. 衝突 (解決) 更新が競合したら 衝突をその場で解決 conflict3 で更新 $ $ $ $ git checkout conflict3 echo “conflict3” >> f git add f git commit -m ’Update 3.’
  • 236. 衝突 (解決) 更新が競合したら 衝突をその場で解決 conflict3 で conflict1 と merge (衝突) $ git merge conflict1
  • 237. 衝突 (解決) 更新が競合したら 衝突をその場で解決 衝突しない様に編集、commit してから再度 merge $ vi f $ git add f $ git commit
  • 238. 中で起きている事 更新が競合したら repository workspace cdefghi Update 1. cached (index) cdefghi conflict1 Merge remote-tracking branch ...
  • 239. 中で起きている事 更新が競合したら repository workspace cdefghi Update 1. cached (index) cdefghi $ cd ˜/local rep $ git branch conflict3 conflict1 Merge remote-tracking branch ...
  • 240. 中で起きている事 更新が競合したら repository workspace cdefghi Update 1. cached (index) cdefghi $ $ $ $ git checkout conflict3 echo “conflict3” >> f git add f git commit -m ’Update3’ conflict1 Merge remote-tracking branch ...
  • 241. 中で起きている事 更新が競合したら repository workspace cdefghi Update 1. cached (index) cdefghi $ $ $ $ git checkout conflict3 echo “conflict3” >> f git add f git commit -m ’Update3’ Update 3. conflict1 conflict3 Merge remote-tracking branch ...
  • 242. 中で起きている事 更新が競合したら repository workspace cdefghi Update 1. cached (index) cdefghi Update 3. conflict1 conflict3 Merge remote-tracking branch ... $ git merge conflict1 workspace に無理矢理両方の更新を適用した状態
  • 243. 中で起きている事 更新が競合したら repository workspace cdefghi Update 1. cached (index) cdefghi Update 3. conflict1 conflict3 Merge remote-tracking branch ... $ git merge conflict1 workspace に無理矢理両方の更新を適用した状態
  • 244. 中で起きている事 更新が競合したら repository workspace cdefghi Update 1. cached (index) cdefghi $ vi f $ git add f Update 3. conflict1 conflict3 Merge remote-tracking branch ...
  • 245. 中で起きている事 更新が競合したら repository workspace cdefghi Update 1. cached (index) cdefghi $ vi f $ git add f Update 3. conflict1 conflict3 Merge remote-tracking branch ...
  • 246. 中で起きている事 更新が競合したら repository workspace cdefghi Update 1. cached (index) cdefghi $ git commit Update 3. conflict1 conflict3 Merge remote-tracking branch ...
  • 247. 中で起きている事 更新が競合したら repository workspace cdefghi Merge bra... Update 1. cached (index) cdefghi $ git commit conflict3 conflict1 Update 3. Merge remote-tracking branch ...
  • 248. conflict 補足 更新が競合したら git merge --abort の過信は禁物 workspace や cached が clean で無い場合 11 、正しく戻ら ない可能性がある conflict 解決時、勝手に他人の更新を変更する事は危険 自分の更新を変更するか、競合する更新をした人に確認 するべき abort せずに直接 conflict を解消する際は、 競合部分の削除と順番入れ替えのみで対応するべき (先祖の commit に含まれない更新を merge commit に入 れるべきではない) (これ以外の手段で conflict を解消する方法は evil merge と言われている) 11 未 commit のファイルがある状態
  • 249. 更新者の確認 その他 問題のファイルの何行目を、誰がいつ加えたか(変更したか) 調べる $ git blame f 9e7563ff (Your Name 2014-01-03 15:18:02 +0900 1) test
  • 250. ここまでのまとめ 更新が競合したら local repository に remote repository の最新情報が含まれ ていないと git push は失敗する そのような場合は local repository を最新にしてから再 push すると良い merge 時に conflict が発生した際に取る方法は、merge 取りやめか conflict 解消の 2 通り merge を取りやめて、衝突しないように commit してか ら再度 merge する事も可能 git blame はファイルの更新者を行単位で表示
  • 251. revert その他 特定の commit を打ち消す commit を行う (commit とその親 commit の差分を打ち消す) 戻したいバージョン (例えば、“Add h.” という commit ) の commit のハッシュ値を確認 $ git log --graph ... (環境ごとに commit のハッシュ値は異なるので注意) 今回は 06d957bc3322557eb76fc86ee87b66c0288d3c08 とする
  • 252. revert その他 特定の commit を打ち消す commit を行う (commit とその親 commit の差分を打ち消す) $ git revert 06d912 12 “Add i.” の commit
  • 253. 中で起きている事 その他 repository workspace cdefghi Merge remote-... cached (index) cdefghi Add h. Add i. Add f.
  • 254. 中で起きている事 その他 repository workspace cdefghi Merge remote-... cached (index) cdefghi Add h. Add i. Add f. $ git revert 06d9 06d9 (“Add h.” の commit) の変更 (06d9 とその親 commit の差分) の逆を、workspace と cached に行う
  • 255. 中で起きている事 その他 repository workspace cdefg i Merge remote-... cached (index) cdefg i Add h. Add i. Add f. $ git revert 06d9 06d9 (“Add h.” の commit) の変更 (06d9 とその親 commit の差分) の逆を、workspace と cached に行う
  • 256. 中で起きている事 その他 repository workspace cdefg i Merge remote-... cached (index) cdefg i Add h. Add i. Add f. $ git revert 06d9 git commit を行う
  • 257. 中で起きている事 その他 repository workspace cdefg i Revert “Add h.”... Merge remote-... cached (index) cdefg i Add h. Add i. Add f. $ git revert 06d9 git commit を行う
  • 258. git revert コマンド補足 その他 git revert commit1 [commit2 [commit3 ...]] で特定の commit の変更を打ち消す commit を行う 親が複数存在する commit13 を指定するには、-m という オプションが必要 (今回の範囲を超えるので詳細は割愛) 13 git merge で作成された commit
  • 259. tag commit に移動しない名前をつける 現在の tag 一覧を表示 $ git tag tag は無いので何も表示されない
  • 260. tag commit に移動しない名前をつける tag を作成 $ git tag v0.0.1 HEAD の向いている commit に対して v0.0.1 という tag をつ ける
  • 261. tag commit に移動しない名前をつける $ git tag tag 一覧を表示 v0.0.1
  • 262. tag commit に移動しない名前をつける $ git tag -d v0.0.1 tag v0.0.1 を削除
  • 263. tag commit に移動しない名前をつける 現在の tag 一覧を表示 $ git tag tag は無いので何も表示されない
  • 264. tag コマンド補足 git tag tag-name [commit] で commit を指す tag を作成 commit は branch, HEAD, ハッシュ値等で指定 commit のデフォルトは HEAD tag を remote repository へ転送するには git push URI tag tag-name remote repository の tag を削除するには git push URI :refs/tags/tag-name remote repository の tag も git fetch --all -p で取得可能 merge や checkout の commit 指定に tag も使用可能 ただし、その場合 HEAD が branch から外れるので注意
  • 265. ここまでのまとめ その他 git revert は過去の commit を打ち消す commit 作成 remote repository に push する前なら、他の方法 14 で 代用出来ないか考えた方が良い (不要な commit と打ち消す commit が有るより、両方無 い方が良い場合が多い) git tag は tag 一覧表示、作成、削除 branch や HEAD は移動するが tag は移動しないので、 リリースヴァージョン管理等に使用可能 14 git reset 等
  • 266. 最後に もっと git を勉強するには man を読む 公式ガイドを読む 一般的な git の開発フローを学ぶ などの方法がおすすめ
  • 267. 最後に man の探し方 git の man は、“git” と最初の引数を “-” でつなげた物を読む 例) $ man git-add
  • 268. 最後に man の探し方 git の man は、“git” と最初の引数を “-” でつなげた物を読む 例) $ man git-add 最初の引数まで入力して --help と入力しても同じ 例) $ git add --help
  • 269. 最後に man の探し方 git の man は、“git” と最初の引数を “-” でつなげた物を読む 例) $ man git-add 最初の引数まで入力して --help と入力しても同じ 例) $ git add --help そもそも最初の引数が分からない場合や、 git でどんな事が出来るか知りたい場合は git の man を引く $ man git
  • 270. 最後に 公式ガイドの見方 $ git help -g で git のガイド一覧を表示
  • 271. 最後に $ git help -g The common Git guides are: attributes Defining attributes per path glossary A Git glossary ignore Specifies intentionally untracked files to ignore modules Defining submodule properties revisions Specifying revisions and ranges for Git tutorial A tutorial introduction to Git (for version 1.5.1 or newer) workflows An overview of recommended workflows with Git ’git help -a’ and ’git help -g’ lists available subcommands and some concept guides. See ’git help <command>’ or ’git help <concept>’ to read about a specific subcommand or concept.
  • 272. 最後に 興味があるガイドをみつけたら $ git help <concept> で閲覧 例) git help tutorial
  • 273. 最後に 一般的な開発フローについて学ぶ 本勉強会ではあまり触れませんでしたが best practice についても勉強すると面白いかも まずは、git flow と github flow を勉強すると良いと思います
  • 274. 最後に “git 次の一歩” も開催予定なので、 興味のある方は来てください

×