今まで何となく使ってきたgitについてですが、根本的な考え方が曖昧なので、本記事でまとめたいと思います。
この記事は、gitを何となく使っているけど基礎的な部分を理解したい方向けの記事です。
Gitとは
Gitとは、コード管理ツールです。昨日まで動いていた部分が今日色々つき足していたら動かなくなったので、昨日のバージョンに戻したい、、という場合に巻き戻すことができたりします。
GitHubを使えば、自分の書いたコードをインターネット上に置くことができ、世界に公開することが可能になったり、友人にコードをシェアすることができるので、共同作業ができるようになります。
Gitの概念
やっぱり、公式が一番わかりやすい。
https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell
コミットとは
コミットとはスナップショットのことであり、コミットはそれぞれツリーを持っていて、ツリーはブロブ(更新したファイル)の情報を持っている。
コミットが増えていくと・・・
矢印の向きが新しいコミットから古いコミットに向く意味がよくわかっていなかったのですが、親情報をポイントしているので、新→古になるんですね。
ブランチとは
直訳すると枝ですが、その名の通り複数に枝分かれさせて、ブランチごとに作業が可能となります。
こちらの図では、test
ブランチとmain
ブランチが#962ce
コミットをポイントしています。HEAD
というのは、今現在作業しているブランチを指します。HEAD
の概念も大切なので覚えておきましょう。
mergeの概念
merge
とは、ブランチで作業していたものを別のブランチと合体させたいときに使います。merge
には2つの種類があります。
fast-forwarded merge
比較的簡単にmerge
が可能な場合です。
3-way merge
少し複雑な場合のmerge
方法です。
※C6に入らない->C5に入らないですね。
リモートリポジトリがある場合の概念
ローカルで開発したものを、他の仲間にコードシェアしたい場合に使うのがリモートリポジトリ(たとえばGitHub)です。
remote tracking branchとは
リモートにあるブランチの参照のことをremote tracking branch
と呼びます。見た目としては、origin/main
やorigin/test
など。
remote tracking branch
はただの参照なので、そのブランチを修正したりすることができません。修正する場合はcheckout -b
コマンドを使いましょう。
たとえばローカルにtest
ブランチのremote tracking branch
があるとした場合。
test
ブランチがローカルに作られ、-b
オプションでHEAD
をtest
ブランチにポイントしてくれます。
pullとfetchの違い
何気なく使っていたpull
ですが、細かいことを理解できていなかったのでまとめます。
fetchとは
remote tracking branch
を更新してくれます。以下の図では、fetch
することで、新しくC2というコミットを指すorigin/main
が更新されます。origin/main
はただのremote tracking branch
ですので、その修正をローカルブランチであるmain
で取り込みたければ、main
の位置を更新しなくてはいけません。
更新するためには、git merge origin/main
をすることで、main
のポイントをC2になるようにします。こうすることで、main
ブランチでC2の修正が取り込まれました。
pullとは
上記のfetch
, merge
を一気にやってくれるコマンドになります。git pull
することで、(1) remote tracking branch
を更新してくれ、(2)merge
してくれることで、main
ブランチが常に最新のコミットを指すようになるんですね。
tracking branchとupstream branchとは
この2つもよく出てきて、違いがいまいちわかりません。
tracking branch
remote tracking branch
から、ローカルに作ったブランチのことをtracking branch
と言います。
この場合でいう、test
ブランチです。
upstream branch
この時、tracking branch
がトラックしているブランチのことをupstream branch
と言います。上記の場合でいう、リモートリポジトリに存在するtestブランチそのものです。
ふ〜ん、程度に覚えておくといいのかもしれません。
まとめ
仕事で使っているgitですが、基本的なところを理解できていなかったので、自分のわかっていなかった部分を中心にまとめてみました。だいぶ理解は深まったように思います。次回はrebase
についてまとめたいなと思います!
にほんブログ村に参加しております!よろしければクリックお願いします 🙂
にほんブログ村
コメント