Menu/Prof
スズキマコト
自由人
元々は楽器屋のギター兄ちゃん。
趣味でプログラミングしてるうちに
本職になってしまった人。

過去に喋っていた言語
c pascal Assembler
perl PHP Python Ruby など
javascriptなどは都度必要に応じて。
最近Mac買ったのでswift勉強してます。

体ぶっ壊して死にかけたので人生RESET中。

はじめに:RCS世代からGitの時代へ

Some visuals are licensed via Canva Pro (includes commercial rights).
Usage complies with Canva’s license terms at the time of use.
License policy: canva.com/policies/content-license-agreement

X
     この記事はプロモーションを含みます

1990年代初頭、ソースコードの管理といえばRCS。.v ディレクトリに履歴を詰め込み、ci / co で慎重に出し入れしていた──そんな時代から数十年。

CVSが登場し、チーム作業が見えてきたものの、競合やマージに泣かされてRCSへ戻った日々も。あの時代を知る元エンジニアが今、Gitを“なんとなく”使っている。

でも──そろそろ曖昧なままではいかんのでは?

これは、CVS直撃世代のじじぃ(俺)が現代のGitをちゃんと腹落ちさせるための備忘録
※たぶん似たような“迷える元co -l民”が他にもいると信じて。

contents

RCS/CVSの限界と“ありがとう”

RCSやCVSによる初期のバージョン管理を象徴する時代のイメージ。複数人作業や履歴保存の革命的だった当時の雰囲気を表現。

90年代、RCSやCVSは「バージョン管理の革命」だった。履歴が残る。複数人で管理できる。それだけで神のツールだった。

でも──

  • 並列開発は地獄(ブランチ切ったら戻れない呪い)
  • マージは「今日の分はあきらめよう」案件
  • リモート作業? FTPでファイル投げてたよ?

今だから笑えるけど、あの頃は真剣だった。ありがとうRCS、ありがとうCVS。

Gitの登場:分散型という進化

Gitによる分散型バージョン管理の概念を象徴する図。clone・push・pullなどの分散協調作業のイメージ。

Gitは「分散型バージョン管理システム」──この言葉だけで眠くなる? いや違う。

各自が完全な履歴ごとコードを持てる世界

  • clone = まるごと引っ越し
  • push/pull = 履歴単位でのお届け
  • 中央サーバー壊れても、cloneしてた誰かがいれば復旧可

もはや「中央の神様」がいなくても、俺たちはやっていけるんだ。

Gitの核心:差分ではなくスナップショット

CVS/RCSは「diffの積み重ね」で構築されてた。

Gitは違う。commitごとに“その瞬間の世界”をまるごと保存。

  • 戻すのが速い(何度救われたか)
  • 信頼できる(過去にウソつかない)
  • 比較がしやすい(喧嘩にならない)

例えるなら、MacのTime Machine。
でもGitは開発者のためのTime Machine。それも、ローカル完結で、履歴付きで、好きに分岐できるやつ。

Git基本5コマンド:これだけ押さえれば動く

Gitの基本操作5つ(init、add、commit、status、log)を視覚的に表したステップイメージ。
STEP
git init:リポジトリの初期化

.gitが作られることで「履歴を残す対象」になる。CVSの“登録”に近い。

STEP
git add:変更をステージに載せる

変更ファイルをcommit候補に指定する。忘れると「commitしたのに空っぽ現象」になる。

STEP
git commit:履歴に確定

メッセージと共に“その瞬間の状態”が保存される。CVSでいう“チェックイン”に似て非なる存在。

STEP
git status:現在地を知る

今の状態(追跡対象・未追加・ステージ済み)が一覧できる。迷子にならないための必須コマンド。

STEP
git log:履歴を見る

過去のcommit一覧を表示。誰がいつ何をやったかが全部見える。

コマンド一覧(ローカル操作用)

操作目的/意味コマンド例注意点ワンポイント
init履歴管理を開始git initすでに.gitがあると再初期化されるまず空フォルダで実行してみよう
add変更を記録候補に追加git add ファイル名addしないとcommitしても記録されない変更があるたびに忘れず実行
commit履歴に記録(メッセージ付き)git commit -m "変更内容"コメントなしだとVimが起動する必ず” “で囲って内容を入れよう
status現在の状態を確認git status状況を見ずに操作するとミスが増える困ったらとりあえずstatus
log履歴一覧を見るgit logデフォルトだと長くて読みにくい--oneline で簡易表示できる
diff変更点を確認git diffステージ済みとの差分は別コマンドgit diff --staged も覚えておこう
restore変更を元に戻すgit restore ファイル名作業内容が消える。元に戻せないcommit前は慎重に実行すること
resetcommitを取り消すgit reset --soft HEAD^--hardは完全に巻き戻る--softでまず様子を見るのが安全
branch新しい作業ラインを作るgit branch 新ブランチ名作っただけでは切り替わらない分岐後は必ずswitchで移動
switchブランチを切り替えるgit switch ブランチ名未保存の変更があると切替できない切り替え前にcommitかstashを
stash作業内容を一時退避git stashstashしたまま忘れる人が多いgit stash list で一覧を見よう
stash pop退避した内容を戻すgit stash pop競合が起きる場合もある戻す前にstatusで確認を
revert過去のcommitを打ち消すgit revert HEAD履歴は残るので安全な取り消しresetよりも安心して使える
tag履歴に目印を付けるgit tag v1.0.0tagは履歴を変更しないバージョン管理にとても便利

リモートリポジトリとGitHub:その本質

ローカルGitとGitHubの関係性を象徴する図。履歴の共有と同期を支える仕組みの全体像。

Gitはローカル完結型。でもチームで使うには「共有の場=リモートリポジトリ」が必要。
意識してpull/fetch/pushしない限り、何も共有されない。Gitは“放任主義”です。

  • git fetch:リモートの最新を取ってくる(ローカルには未反映)
  • git pull:fetchしてmerge(履歴に加える)
  • git push:ローカルの履歴をリモートに反映

CVS的に言えば「中央サーバーへの登録」に似ているようで、全然違う。
Gitは「中央に従う」ではなく「各自が責任を持って同期する」文化なのです。

そしてGitHub──
これは「Gitを使うWebサービス」にすぎません。Gitの一部ではありません。

GitとGitHubの役割の違い:ざっくり表で振り返り

項目Git(ツール)GitHub(サービス)
役割履歴管理のためのコマンド群履歴を共有・保管するWebサービス
使う場所自分のPC(ローカル)インターネット上(クラウド)
オフライン利用可能不可(基本オンライン)
主な操作commit / add / pushなどPull Request / Issue / 管理画面操作
必要なものターミナル + GitインストールWebブラウザ + アカウント登録

Gitが「履歴ノート」だとすれば、GitHubはそのノートを置いておく「本棚」。
GitはGitHubがなくても使えるし、GitHubもGit以外の用途で使われることもある。
つまり両者は兄弟でも親子でもなく、目的を共有する“隣人”のような関係です。

よくあるCVS脳のGitトラップ(実録)

CVS時代の思考から脱却できずにGitでつまずく典型パターンをユーモラスに表現した図。
  • git commitだけ打って「履歴が無い!?」→ addしてなかった(数え切れない)
  • ロック? ないよ。Gitは並行前提(co -l民が震える)
  • pushし忘れて「何も変わってない」と言われる(自分のせい)
  • diffが読めない → CVS時代から読んでなかった説ある
  • 「タグってブランチと同じ?」→ 違います。ぜんぜん違います。

Gitは寛容だが、無知には厳しい。
でも裏を返せば、正しく理解すればとても強力で自由なツールだということ。

まとめ:Gitは「俺たち世代」のためのツールでもある

CVS世代のエンジニアがGitに手応えを感じる様子を象徴するビジュアル。履歴の意義を実感する年代の共感を誘う。

Gitは若い人のためのツールではない。

「履歴を残す大切さ」を知っている俺たちだからこそ、Gitの哲学に納得できる。

  • diffを読む筋力がある
  • 意図して履歴を整理できる
  • 戻せる喜びと、事故る恐怖を知ってる

CVS/RCSで地雷を踏み抜いてきたからこそ──
今こそ、Gitは“俺たちの手に馴染む道具”になれる。

Gitを使いこなすってのは、履歴を未来に渡すってこと。
過去と対話して、今を記録して、未来に備える。

そんな当たり前のことを、Gitは静かにやってくれるんだ。

Git初心者がCVS脳でつまずくQ&A

GitとCVSの違いに戸惑う初心者の質問と回答を象徴するイラスト。FAQセクションの導入を担う。

Gitの「commit」はCVSの「check-in」と同じ?

近いですが、意味が深いです。
Gitではcommitが「状態+理由」を丸ごと記録するもので、チェックインというより「履歴のスナップショット作成」に近い感覚です。

タグとブランチってどう違う?

CVSでは似たような存在でしたが、Gitでは用途が明確に分かれています。
ブランチは作業の進行中に使うものタグは過去の特定の履歴を固定する目印です。

Gitでロックはかけられないの?

Gitにはファイルロックの概念がありません。
代わりに並列ブランチとマージ前提の設計になっているため、衝突しても履歴ベースで対処できます。

リモートって何?GitHubのこと?

リモートとは「共有用の別リポジトリ」のこと。
GitHubはその1つにすぎません。Gitではどんなサーバーでもリモートとして扱えます。

pushとcommitの違いがややこしい

commitはローカルに履歴を残す操作。
pushはその履歴をリモートに送る操作です。commitしてもpushしなければ他人には見えません

pullとfetchの違いは?

pull = fetch + merge です。
fetchはリモートの履歴を取得するだけ、pullはそれをローカルに取り込みます。

commitしたのに履歴に無い!? なんで?

git add を忘れていませんか?
Gitではaddで「対象に含める」指定をしてからcommitする流れです。

リポジトリって何を指す?

Gitにおけるリポジトリとは履歴をすべて含む「プロジェクトの記録箱」です。
ローカルにも、リモートにもそれぞれあります。

Gitを使うだけならGitHubアカウント必要?

不要です。
Gitはローカルだけで完結します。GitHubは共有や公開をしたいときだけ必要です。

CVS時代と比べてGitの最大のメリットって?

履歴の信頼性と作業の自由度です。
ローカルで分岐・試行錯誤できる柔軟さと、そのすべてを履歴で戻せる力が、Gitの本質です。

おまけ:俺的Gitスタート3点セット(忘れたら詰む)

Git導入初期に必要な3つの設定・操作をまとめた視覚ガイド。初心者が忘れやすい項目の備忘イメージ。

しばらくGit触ってなかったとき、必ず「あれ何だっけ」ってなるやつ。
自分用に書いとく。これは俺用だけど笑

STEP
ユーザー名とメールの設定

履歴に作者名が残らないと“誰が何したか”が不明になります。最初にやっとくべし。

git config --global user.name "あなたの名前"
git config --global user.email "you@example.com"
STEP
リポジトリの初期化

Gitで管理したいフォルダに入って、初期化。.gitディレクトリが作られ、以降の変更が履歴対象になります。

git init
STEP
初回ファイルをcommit

とりあえずREADME.mdを作って、Gitの流れをひととおり体験するだけでも違います。

echo "# My Project" > README.md
git add README.md
git commit -m "初回コミット:README追加"

この3ステップが済んだら、あとは思い出しながらでもなんとかなる。

自分のGit環境を知る:macOS編

macOSにおけるGitのインストール場所やバージョン確認手順を示す図解。トラブルシューティングに役立つ。

macOSでは、初めてgitを打ったときに「Command Line Tools」が自動導入されます。
でも、どのGitが使われてるかは知っておいたほうが安全。

現在使われているGitのパスを確認

which git

出力例:

出力例意味
/usr/bin/gitAppleのCommand Line Toolsに含まれる標準Git
/opt/homebrew/bin/gitHomebrewでインストールした新しめのGit(Apple Silicon)
/usr/local/bin/gitHomebrewで入れたGit(Intel Macなど)

バージョン確認も忘れずに

git --version
バージョン出力意味
git version 2.30.1 (Apple Git-130)macOSに標準で付属するCommand Line Tools版。やや古め。
git version 2.4.90Homebrewでインストールされた最新版。手動で導入したGit。
git version 2.39.2 (Apple Git-143)macOS Ventura以降での比較的新しい標準バージョン。
git version 2.42.0.windows.2Windows向けに配布されているGit for Windowsの一例。
git version 1.8.3.1極端に古い環境の可能性あり。更新を強く推奨。

最新版にしたいときはHomebrewで:

brew install git

優先パスの設定も忘れずに。.zshrc.bash_profileにこれを追加:

export PATH="/opt/homebrew/bin:$PATH"

Gitの場所とバージョンがわかれば、トラブル時に「何が原因か」切り分けやすくなります。

シェアしてくれると喜びます
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

makotoのアバター makoto Blogger&YouTuber

サーバー管理者として17年ほど仕事でサーバー触ってました。
www,mail,dns,sql各鯖をすべてFreeBSDで運用してましたが現世ではかなりレアなタイプになるみたいですね笑

viやシェルスクリプトとかperlとかgccとかFreeBSDとか実はbashよりtcshが好きとか時々寝ぼけるのは
その名残でしょう。

今まで縁の下の力持ち的な他人のためにプログラムを書き他人のためにサーバー構築し他人のためにWEBサイトを創る的な世界から
自分の好きなことに集中できる環境は実に気持ち良いですね。
現役は引退済みなので難しいことはやりませんしやれません。

現在 ほぼ自由人。

contents