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

1990年代初頭、ソースコードの管理といえばRCS。.v
ディレクトリに履歴を詰め込み、ci
/ co
で慎重に出し入れしていた──そんな時代から数十年。
CVSが登場し、チーム作業が見えてきたものの、競合やマージに泣かされてRCSへ戻った日々も。あの時代を知る元エンジニアが今、Gitを“なんとなく”使っている。
でも──そろそろ曖昧なままではいかんのでは?
これは、CVS直撃世代のじじぃ(俺)が現代のGitをちゃんと腹落ちさせるための備忘録。
※たぶん似たような“迷える元co -l民”が他にもいると信じて。
RCS/CVSの限界と“ありがとう”

90年代、RCSやCVSは「バージョン管理の革命」だった。履歴が残る。複数人で管理できる。それだけで神のツールだった。
でも──
- 並列開発は地獄(ブランチ切ったら戻れない呪い)
- マージは「今日の分はあきらめよう」案件
- リモート作業? FTPでファイル投げてたよ?
今だから笑えるけど、あの頃は真剣だった。ありがとうRCS、ありがとうCVS。
Gitの登場:分散型という進化

Gitは「分散型バージョン管理システム」──この言葉だけで眠くなる? いや違う。
各自が完全な履歴ごとコードを持てる世界。
- clone = まるごと引っ越し
- push/pull = 履歴単位でのお届け
- 中央サーバー壊れても、cloneしてた誰かがいれば復旧可
もはや「中央の神様」がいなくても、俺たちはやっていけるんだ。
Gitの核心:差分ではなくスナップショット
CVS/RCSは「diffの積み重ね」で構築されてた。
Gitは違う。commitごとに“その瞬間の世界”をまるごと保存。
- 戻すのが速い(何度救われたか)
- 信頼できる(過去にウソつかない)
- 比較がしやすい(喧嘩にならない)
例えるなら、MacのTime Machine。
でもGitは開発者のためのTime Machine。それも、ローカル完結で、履歴付きで、好きに分岐できるやつ。
Git基本5コマンド:これだけ押さえれば動く

.git
が作られることで「履歴を残す対象」になる。CVSの“登録”に近い。
変更ファイルをcommit候補に指定する。忘れると「commitしたのに空っぽ現象」になる。
メッセージと共に“その瞬間の状態”が保存される。CVSでいう“チェックイン”に似て非なる存在。
今の状態(追跡対象・未追加・ステージ済み)が一覧できる。迷子にならないための必須コマンド。
過去の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前は慎重に実行すること |
reset | commitを取り消す | git reset --soft HEAD^ | --hard は完全に巻き戻る | --soft でまず様子を見るのが安全 |
branch | 新しい作業ラインを作る | git branch 新ブランチ名 | 作っただけでは切り替わらない | 分岐後は必ずswitchで移動 |
switch | ブランチを切り替える | git switch ブランチ名 | 未保存の変更があると切替できない | 切り替え前にcommitかstashを |
stash | 作業内容を一時退避 | git stash | stashしたまま忘れる人が多い | git stash list で一覧を見よう |
stash pop | 退避した内容を戻す | git stash pop | 競合が起きる場合もある | 戻す前にstatusで確認を |
revert | 過去のcommitを打ち消す | git revert HEAD | 履歴は残るので安全な取り消し | resetよりも安心して使える |
tag | 履歴に目印を付ける | git tag v1.0.0 | tagは履歴を変更しない | バージョン管理にとても便利 |

リモートリポジトリと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トラップ(実録)

git commit
だけ打って「履歴が無い!?」→add
してなかった(数え切れない)- ロック? ないよ。Gitは並行前提(co -l民が震える)
- pushし忘れて「何も変わってない」と言われる(自分のせい)
- diffが読めない → CVS時代から読んでなかった説ある
- 「タグってブランチと同じ?」→ 違います。ぜんぜん違います。
Gitは寛容だが、無知には厳しい。
でも裏を返せば、正しく理解すればとても強力で自由なツールだということ。
まとめ:Gitは「俺たち世代」のためのツールでもある

Gitは若い人のためのツールではない。
「履歴を残す大切さ」を知っている俺たちだからこそ、Gitの哲学に納得できる。
- diffを読む筋力がある
- 意図して履歴を整理できる
- 戻せる喜びと、事故る恐怖を知ってる
CVS/RCSで地雷を踏み抜いてきたからこそ──
今こそ、Gitは“俺たちの手に馴染む道具”になれる。
Gitを使いこなすってのは、履歴を未来に渡すってこと。
過去と対話して、今を記録して、未来に備える。
そんな当たり前のことを、Gitは静かにやってくれるんだ。
Git初心者がCVS脳でつまずくQ&A

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

しばらくGit触ってなかったとき、必ず「あれ何だっけ」ってなるやつ。
自分用に書いとく。これは俺用だけど笑
履歴に作者名が残らないと“誰が何したか”が不明になります。最初にやっとくべし。
git config --global user.name "あなたの名前"
git config --global user.email "you@example.com"
Gitで管理したいフォルダに入って、初期化。.git
ディレクトリが作られ、以降の変更が履歴対象になります。
git init
とりあえずREADME.md
を作って、Gitの流れをひととおり体験するだけでも違います。
echo "# My Project" > README.md
git add README.md
git commit -m "初回コミット:README追加"
この3ステップが済んだら、あとは思い出しながらでもなんとかなる。
自分のGit環境を知る:macOS編

macOSでは、初めてgit
を打ったときに「Command Line Tools」が自動導入されます。
でも、どのGitが使われてるかは知っておいたほうが安全。
現在使われているGitのパスを確認
which git
出力例:
出力例 | 意味 |
---|---|
/usr/bin/git | AppleのCommand Line Toolsに含まれる標準Git |
/opt/homebrew/bin/git | Homebrewでインストールした新しめのGit(Apple Silicon) |
/usr/local/bin/git | Homebrewで入れたGit(Intel Macなど) |
バージョン確認も忘れずに
git --version
バージョン出力 | 意味 |
---|---|
git version 2.30.1 (Apple Git-130) | macOSに標準で付属するCommand Line Tools版。やや古め。 |
git version 2.4.90 | Homebrewでインストールされた最新版。手動で導入したGit。 |
git version 2.39.2 (Apple Git-143) | macOS Ventura以降での比較的新しい標準バージョン。 |
git version 2.42.0.windows.2 | Windows向けに配布されているGit for Windowsの一例。 |
git version 1.8.3.1 | 極端に古い環境の可能性あり。更新を強く推奨。 |
最新版にしたいときはHomebrewで:
brew install git
優先パスの設定も忘れずに。.zshrc
や.bash_profile
にこれを追加:
export PATH="/opt/homebrew/bin:$PATH"
Gitの場所とバージョンがわかれば、トラブル時に「何が原因か」切り分けやすくなります。

