はじめに
Git、こういう状態で使っていませんでしたか?
-
add → commit → pushは使えている - でも中で何が起きているかは分からない
- ブランチ切り替えでファイルが変わる理由が分からない
- Gitって結局どこで何してるの?
私はまさにこの状態でした。
今回、リポジトリ移行をきっかけに
**「フォルダの中で何が起きているか」**が理解できたのでまとめます。
結論
Gitはこの3つで考えると一気に分かります。
- 作業フォルダ(自分が編集する場所)
-
.git(履歴を管理している本体) - GitHub(保存・共有先)
作業フォルダ
↓ commit
.git(履歴)
↓ push
GitHub
Gitはフォルダの中で動いている
まずは何もしていない状態です。
project/
└ app.py
print("Hello")
この時点では、Gitはまだ何も管理していません。
git add と git commit の違い
ここが一番混乱していました。
git add
git add .
フォルダの見た目
project/
├ app.py
└ .git
中で起きていること
- 変更を「commit候補」に登録しているだけ
- まだ履歴にはなっていない
git commit
git commit -m "初期作成"
フォルダの見た目
project/
├ app.py
└ .git
見た目は変わりません。
中で起きていること
.git
└ 「print("Hello") の状態」が保存される
👉 この瞬間、履歴が作られる
ファイルを変更するとどうなるか
print("Hello world")
この時点ではまだ commit していません。
状態
作業フォルダ
└ print("Hello world")
.git
└ print("Hello")
👉 ファイルと履歴がズレる
もう一度 commit すると
git add .
git commit -m "変更"
.git
├ print("Hello")
└ print("Hello world")
👉 過去と現在が両方残る
ブランチ切り替えで何が起きるか
ここが一番「なるほど」となった部分です。
main の状態
print("main")
feature の状態
print("feature")
切り替え
git switch main
print("main")
git switch feature
print("feature")
何が起きているか
👉 .git の状態を切り替えて
👉 フォルダの中身を書き換えている
つまり
👉 フォルダの中身が変わるのは正常な動き
commitしないで切り替えると?
print("途中変更")
git switch main
👉 変更が消える可能性あり
push すると何が起きるか
git push
push前
ローカル
├ 作業フォルダ
└ .git(履歴あり)
GitHub
└ 何もない or 古い
push後
GitHub
└ .gitの内容が反映される
👉 履歴がGitHubにコピーされる
originとは何か
git remote -v
origin https://github.com/user/repo.git
👉 GitHubの場所の名前
originを変えるとどうなるか
git remote set-url origin 新URL
中で起きていること
変更前
.git → old GitHub
変更後
.git → new GitHub
👉 送信先が変わるだけ
リポジトリ移行の本質
git remote set-url origin 新URL
git push -u origin main
フォルダの中では
ローカル(履歴あり)
↓
送信先変更
↓
新GitHubへpush
👉 履歴ごと移行される
空フォルダが出ない理由
empty/
👉 GitHubに表示されない
解決
empty/
└ .gitkeep
👉 ファイルがあれば管理される
まとめ
- Gitはフォルダ+
.gitで動く -
.gitが履歴の本体 - commitで履歴保存
- pushでGitHubへ反映
- ブランチは状態の切り替え
- origin変更でリポジトリ移行できる
最後に
Gitはコマンドを覚えるよりも、
👉 フォルダの中で何が起きているかを理解すること
これが一番重要だと感じました。
同じように「なんとなく使っている」状態の方の助けになれば嬉しいです。