Successfully reported this slideshow.
Your SlideShare is downloading. ×

GitのHEADって何?

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 59 Ad

More Related Content

Recently uploaded (20)

Advertisement

GitのHEADって何?

  1. 1. GitのHEADって何? 2021年08月21日
  2. 2. 自己紹介 名前: 三宅 英明 Twitter: @mollifier 神戸のプログラマ
  3. 3. GitのHEADって何?
  4. 4. GitのHEADって何? Gitの説明を読んでいると、HEADというものが出てき ます
  5. 5. GitのHEADって何? この本(新しいLinuxの教科書)にも出てきます
  6. 6. GitのHEADって何? $ git diff HEAD
  7. 7. GitのHEADって何? $ git checkout HEAD .
  8. 8. GitのHEADって何? 「HEADって何?」 「唐突すぎて意味分かんない」
  9. 9. GitのHEADって何? このHEADとは一体何なのかを説明します
  10. 10. GitのHEADって何? Gitコマンドにはglossary(用語集)というものがついて いて、そこにHEADの説明も書いてあります。 $ git help glossary または $ man gitglossary
  11. 11. GitのHEADって何? The current branch. In more detail: Your working tree is normally derived from the state of the tree referred to by HEAD. HEAD is a reference to one of the heads in your repository, except when using a detached HEAD, in which case it directly references an arbitrary commit.
  12. 12. GitのHEADって何? 「HEADとは、要するにcurrent branch(現在のブ ランチ)だよ」
  13. 13. GitのHEADって何? 「もっと詳しく言うと、HEADとはheadのうちのど れか一つを指し示す参照だよ」
  14. 14. GitのHEADって何? じゃあブランチとかhead(小文字)って何?
  15. 15. Gitのブランチって何? ブランチとは
  16. 16. Gitのブランチって何? ブランチとは、噛み砕いて言うと「枝分かれした開発 の流れ」のことなのですが
  17. 17. Gitのブランチって何? ブランチの実体は、リポジトリの中の.git/refs/heads/ ディレクトリの下にあります
  18. 18. Gitのブランチって何? feature-1ブランチとmasterブランチがあるリポジトリ の例 $ ls .git/refs/heads/ feature-1 master
  19. 19. Gitのブランチって何? feature-1、master、と2つファイルがあります
  20. 20. Gitのブランチって何? .git/refs/heads/の下にあるファイルのことをheadまた はhead refと呼びます。 これがブランチの先頭を指し 示すファイルです。
  21. 21. Gitのブランチって何? ブランチの先頭、ということでheadという名前がつけ られたのでしょう
  22. 22. Gitのブランチって何? 中身はただのテキストファイルです $ cat .git/refs/heads/feature-1 54c5f13f3c4bf8b49ffe3dd499903cbe278868ca
  23. 23. Gitのブランチって何? これは feature-1ブランチの先頭は 54c5f13f3c4bf8b49ffe3dd499903cbe278868caと いうコミットですよ ということを表しています
  24. 24. Gitのブランチって何? 他のブランチも同様です。 $ cat .git/refs/heads/master f90ca53d778c708330013f80acb884914ec115ae
  25. 25. Gitのブランチって何? ここまでのまとめ
  26. 26. Gitのブランチって何? .git/refs/heads/の下にhead(またはhead ref)と 呼ばれるファイルがある headを見れば、各ブランチの先頭がどのコミット になっているのか分かる
  27. 27. GitのHEADって何? じゃあHEAD(大文字)って何?
  28. 28. GitのHEADって何? あるGitリポジトリに複数のコミットがあったとします
  29. 29. GitのHEADって何? Gitのワークツリー(作業コピー)には、そのリポジトリの どこかのコミット(版)が展開されています。どのコミット が展開されているのかを指し示しているのがHEAD です。
  30. 30. GitのHEADって何? .gitディレクトリの中にHEADというファイルがありま す。これがHEADの実体です。
  31. 31. GitのHEADって何? 例
  32. 32. GitのHEADって何? 現在のブランチはmasterブランチだとします。 HEADはmasterブランチを指し示しています。 $ cat .git/HEAD ref: refs/heads/master
  33. 33. GitのHEADって何? feature-1ブランチに切り替えたとします $ git checkout feature-1 Switched to branch 'feature-1'
  34. 34. GitのHEADって何? HEADがfeature-1ブランチを指し示すようになりまし た $ cat .git/HEAD ref: refs/heads/feature-1
  35. 35. GitのHEADって何? git checkoutコマンドは、後ろにhead(head ref)を指 定している、と解釈できます $ git checkout feature-1 そして、そのとき指定したheadがHEADとして保存さ れます
  36. 36. GitのHEADって何? 現在のheadという意味で、HEADと大文字の名前が つけられたのでしょう
  37. 37. GitのHEADって何? git checkoutコマンドはブランチだけではなく、特定の コミットも指定できます $ git checkout 075950f107f25f69b0e6d91194063861063bc618 Note: switching to '075950f107f25f69b0e6d91194063861063bc618'
  38. 38. GitのHEADって何? その場合、HEADはその特定のコミットを指し示して いる状態になります $ cat .git/HEAD 075950f107f25f69b0e6d91194063861063bc618
  39. 39. GitのHEADって何? 要するに、HEADはgit checkoutの後に指定したブラ ンチやコミットのことです
  40. 40. GitのHEADって何? 多くの場合git checkoutの後にブランチ名を指定する ので、HEADはそのブランチを指し示した状態になっ ています
  41. 41. GitのHEADって何? ここまでのまとめ git checkoutコマンドの後ろに指定したブランチ やコミットがHEADになる
  42. 42. GitのHEADって何? で、HEADがあると何がうれしいのか?
  43. 43. GitのHEADって何? たいていの場合、HEADは現在のブランチを指し示し ています
  44. 44. GitのHEADって何? 逆に、現在のブランチを指定したいとき代わりに HEADとも指定できるようになっています
  45. 45. GitのHEADって何? 最初に出した例 $ git diff HEAD
  46. 46. GitのHEADって何? $ git diff HEAD 「リポジトリに最後にコミットしたところ」から「現在の ワークツリー」までの差分を見るコマンド
  47. 47. GitのHEADって何? そもそもgit diffコマンド後に1つ特定のコミットを指定 すると、「指定したコミット」から「ワークツリー」までの 差分が表示される $ git diff 1f61256e66fda560ecf06190930aabc76c84e675
  48. 48. GitのHEADって何? 代わりに1つブランチを指定してもよい。そうした場 合、「指定したブランチの先頭」から「ワークツリー」ま での差分が表示される
  49. 49. GitのHEADって何? 「feature-1ブランチの先頭」から「ワークツリー」まで の差分が表示される $ git diff feature-1
  50. 50. GitのHEADって何? 代わりにHEADと指定してもよい。そうした場合、 「HEAD」から「ワークツリー」までの差分が表示され る
  51. 51. GitのHEADって何? HEADは(たいていの場合)現在のブランチを指し示し ているので、結局 $ git diff HEAD で「現在のブランチの先頭」から「ワークツリー」まで の差分が表示される
  52. 52. GitのHEADって何? 例えば現在のブランチがfeature-1だとして、 $ git diff HEAD $ git diff feature-1 この2つはまったく同じ結果になる
  53. 53. GitのHEADって何? どっちを使ってもよい。ただ、現在のブランチの名前は 今作業しているリポジトリによって変わる。HEADを使 えばリポジトリの状態によらず現在のブランチを指定 できる
  54. 54. GitのHEADって何? git diffでもcheckoutでもpushでも、どんなコマンドで もHEADは使えます
  55. 55. GitのHEADって何? 引数に現在のブランチを指定したいことはよくある。 そういうときHEADを指定すると楽になる。
  56. 56. GitのHEADって何? 絶対HEADを指定しないとだめ、というわけではな い。明示的にブランチ名を指定してもよい。
  57. 57. GitのHEADって何? つまり、HEADは現在のブランチを指定するショートカ ットとして使える
  58. 58. GitのHEADって何? まとめ HEADはgit checkoutで指定したブランチやコミ ットを指し示している 逆にgit checkoutしたものを指定したい時のショ ートカットとしてHEADを指定してもよい
  59. 59. GitのHEADって何? これでもうHEADの使い方で迷わないでしょう

×