はじめに

どうも、「サルでも分かるGit入門」が分からなかった、サル以下の存在です。

正確には、各ページの言わんとしていることは分かるし、言われた通り操作もできる。
だけど、各操作が具体的に、何を対象にしているのかが分からない。

初めての人に教える機会もあるので、ついでにまとめてみました。

基本操作

image.png

操作 説明
fork リモート上でのリポジトリのコピー(ブランチ構成も含めてコピーされる)
clone ローカルへブランチのコピー(ブランチは指定する)
merge 後で補足します。
fetch リモートリポジトリの状態を、リモート追跡ブランチに反映する。マージはしないので、差分チェックしたい時は、いきなりpullするよりは、一度fetchした方が良い。
pull fetch + merge。リモートリポジトリの内容を差分を確認せずに一気にmergeしたい時に行う。
add/stage 修正したファイルをcommit対象にする場合、この操作をする。この操作がされていないファイルは、commitされない。
commit ローカルブランチに変更を反映する。
push ローカルブランチの内容をリモートリポジトリのブランチに反映する。

自分が正しく理解できていなかったこと

ブランチとは

「この線がブランチなのだな」と理解していたのが、適切じゃなかった。
概念的には「線」に近いのだが、実際の挙動としては「点(コミット)」が中心に据えられている。

概念としてのブランチ
image.png

実際のブランチが指し示しているもの
image.png
ここらへんは下のマージについての説明で補足します。

マージ操作におけるブランチ

merge操作についてもここで合わせて説明します。

概念としてのマージ
image.png

実際のマージ
以下の図では、developブランチを起点(checkoutした状態)として、merge対象にfeatureを指定しています。コマンドライクに言うならmerge feature
developブランチでgit merge featureを実行したときに行われる操作は、「developとfeatureの2つを親としたマージコミットが作成され、それが新たなdevelopになる」というもの。
featureブランチが指すコミットは変化しない。
image.png

ブランチとタグの違い

似たような概念で、「タグ」がいますが、以下のような違いがあります。

  • タグは静止点なので、他にcommit/mergeがどれだけ発生しても、指し示すcommitは変動しない。
  • ブランチは、概念としては「線」の扱いなので、commit/merge等で指し示すcommitが変動する。

最後に

色々調べたつもりですが、間違ってたら教えてください・・・

なお、弊社のアドベントカレンダーは、こんなサル以下な記事とは違って、良記事ばっかりなので、ぜひ見てみて下さい。

こんな記事あげて大丈夫かな・・・と小一時間悩みましたが、「へーきへーき!フレンズによって得意な事違うから!」の精神で頑張ります。
きっと、これでハードルが下がるはず・・・あとは頼みましたよ、承太郎・・・

参考資料

基本的な知識

  • A successful Git branching model:英語 / 日本語翻訳 : Git使うなら必ずと言って良いほど話題に上がるもの

初学者向け情報

もう少し詳しく理解したい人向け

ここで説明しきれなかった操作