gitの基本的な考え方をまとめてみた

git-basics プログラミング

※当ブログでは商品・サービスのリンク先にプロモーションを含みます。ご了承ください。

今まで何となく使ってきたgitについてですが、根本的な考え方が曖昧なので、本記事でまとめたいと思います。

この記事は、gitを何となく使っているけど基礎的な部分を理解したい方向けの記事です。

Gitとは

Gitとは、コード管理ツールです。昨日まで動いていた部分が今日色々つき足していたら動かなくなったので、昨日のバージョンに戻したい、、という場合に巻き戻すことができたりします。

GitHubを使えば、自分の書いたコードをインターネット上に置くことができ、世界に公開することが可能になったり、友人にコードをシェアすることができるので、共同作業ができるようになります。

Gitの概念

やっぱり、公式が一番わかりやすい。
https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell

コミットとは

コミットとはスナップショットのことであり、コミットはそれぞれツリーを持っていて、ツリーはブロブ(更新したファイル)の情報を持っている。

コミットが増えていくと・・・

矢印の向きが新しいコミットから古いコミットに向く意味がよくわかっていなかったのですが、親情報をポイントしているので、新→古になるんですね。

ブランチとは

直訳すると枝ですが、その名の通り複数に枝分かれさせて、ブランチごとに作業が可能となります。

こちらの図では、testブランチとmainブランチが#962caコミットをポイントしています。
HEADというのは、今現在作業しているブランチを指しますHEADの概念も大切なので覚えておきましょう。

mergeの概念

mergeとは、ブランチで作業していたものを別のブランチと合体させたいときに使います。mergeには2つの種類があります。

fast-forwarded merge

比較的簡単にmergeが可能な場合です。

3-way merge

少し複雑な場合のmerge方法です。

リモートリポジトリがある場合の概念

ローカルで開発したものを、他の仲間にコードシェアしたい場合に使うのがリモートリポジトリ(たとえばGitHub)です。

remote tracking branchとは

リモートにあるブランチの参照のことをremote tracking branchと呼びます。見た目としては、origin/mainorigin/testなど。

remote tracking branchはただの参照なので、そのブランチを修正したりすることができません。修正する場合はcheckout -bコマンドを使いましょう。

たとえばローカルにtestブランチのremote tracking branchがあるとした場合。

git checkout -b test origin/test

testブランチがローカルに作られ、-bオプションでHEADtestブランチにポイントしてくれます。

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と言います。

git checkout -b test origin/test

この場合でいう、testブランチです。

upstream branch

この時、tracking branchがトラックしているブランチのことをupstream branchと言います。上記の場合でいう、モートリポジトリに存在するtestブランチそのものです。
ふ〜ん、程度に覚えておくといいのかもしれません。

まとめ

仕事で使っているgitですが、基本的なところを理解できていなかったので、自分のわかっていなかった部分を中心にまとめてみました。だいぶ理解は深まったように思います。次回はrebaseについてまとめたいなと思います!

にほんブログ村に参加しております!よろしければクリックお願いします 🙂

にほんブログ村 IT技術ブログへ
にほんブログ村

コメント

タイトルとURLをコピーしました