- Day 76:Git基礎 ― 「コードのタイムマシン」と仲良くなる
- Gitとは ― コードの「タイムマシン」兼「履歴書」
- Gitの基本的な流れ ― 4つのコマンドで一周してみる
- git init ― 「ここから、このフォルダはGit管理します」と宣言する
- git status ― 「今、Gitから見てどういう状態?」を教えてくれる
- git add ― 「この変更を、次のスナップショット候補にします」
- git commit ― 「今の状態を、ひとつの履歴として残す」
- 変更を加えて、もう一度 add → commit の流れを体験する
- Gitの「心のイメージ」をつかむ
- Day 76ミニテンプレート ― 「Git一周」の練習セット
- Day 76のまとめ ― 「Gitは、未来の自分への優しさ」
Day 76:Git基礎 ― 「コードのタイムマシン」と仲良くなる
Day 76からはいよいよ 実践開発編 に入っていきます。 その最初のテーマは、開発者ならほぼ全員がお世話になるツール、
Git(ギット)
です。
今日のキーワードはこの5つ。
- Gitとは
git initgit statusgit addgit commit
「なんだか英単語が並んでいて、ちょっと怖い…」と感じる方もいるかもしれませんが、 ひとつひとつ、落ち着いて触っていけば、 「あ、意外とシンプルなんだ」 という感覚に変わっていきます。
Gitとは ― コードの「タイムマシン」兼「履歴書」
Gitの役割をざっくり一言で
Gitを一言で言うなら、
「ファイルの変更履歴を、いい感じに管理してくれる仕組み」
です。
もう少しイメージを膨らませると、
- コードを書き進めるたびに「スナップショット」を残しておける
- 「昨日の状態に戻したい」「この前のバージョンを見たい」が簡単にできる
- チームで開発するときに、「誰がどこをどう変えたか」が分かる
という、タイムマシン+履歴書+共同作業の土台 のような存在です。
Gitがないとどうなるか
Gitを使わずに開発していると、よくこんなことが起きます。
main.pymain_backup.pymain_backup2.pymain_final.pymain_final2.py
みたいなファイルが増殖していく、あの現象です。
どれが最新なのか分からなくなり、 「とりあえず全部残しておこう…」と、 気持ちがモヤモヤしていきます。
Gitを使うと、この「バックアップファイル地獄」から解放されます。
- ファイル名はそのまま
- 変更履歴はGitが全部覚えてくれる
- 必要なときに、過去の状態を取り出せる
という、かなり快適な世界になります。
Gitの基本的な流れ ― 4つのコマンドで一周してみる
今日扱う4つのコマンドは、 Gitの「いちばん基本の一周」を作るものです。
git init:このフォルダを「Git管理対象」にするgit status:今の状態を確認するgit add:変更を「次のスナップショット候補」にするgit commit:スナップショットとして保存する
この4つが分かると、
「自分のコードに、ちゃんと履歴がついていく」
という感覚をつかめます。
では、ステップバイステップで見ていきましょう。
git init ― 「ここから、このフォルダはGit管理します」と宣言する
まずはプロジェクトフォルダを作る
例として、簡単なPythonプロジェクトを作ってみます。
bash
mkdir day76_git_basic
cd day76_git_basic
このフォルダの中に、試しに1つファイルを作ります。
bash
echo 'print("Hello Git!")' > main.py
main.py の中身はこんな感じですね。
# main.py
print("Hello Git!")
Pythongit init を実行する
このフォルダをGit管理下に置くには、 フォルダの中で次のコマンドを実行します。
bash
git init
これだけです。
実行すると、こんなメッセージが出るはずです(環境によって多少違います)。
Initialized empty Git repository in /path/to/day76_git_basic/.git/
ここで起きていることは、
- フォルダの中に
.gitという隠しフォルダが作られる - この
.gitが、Gitの「脳みそ」のような役割を持つ
ということです。
重要ポイント:
git initは「このフォルダをGit管理対象にする」宣言- 一度実行すればOK(何度もやるものではない)
git status ― 「今、Gitから見てどういう状態?」を教えてくれる
何もしていない状態での git status
git init の直後に、次のコマンドを打ってみます。
bash
git status
すると、こんな感じの出力が出ます。
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
main.py
nothing added to commit but untracked files present (use "git add" to track)
ここで注目したいのは、
- Untracked files:Gitがまだ「追跡していないファイル」がある
main.pyがその対象になっている
という点です。
Gitから見て、
「このフォルダに
main.pyっていうファイルがあるのは分かってるけど、 まだ履歴管理の対象にはしてないよ」
という状態です。
git status は「今の自分の立ち位置」を教えてくれる
git status は、Gitの世界での 「現在地確認」 です。
- どのブランチにいるか
- どのファイルが変更されているか
- どのファイルがまだ追跡されていないか
- 次の
git commitに含まれる変更は何か
などを、まとめて教えてくれます。
Gitを使うときは、
「とりあえず
git statusしてみる」
という癖をつけておくと、 迷子になりにくくなります。
git add ― 「この変更を、次のスナップショット候補にします」
Untrackedな main.py を「追跡対象」にする
先ほどの git status で、main.py は Untracked files にいました。
このファイルを「Gitで管理する対象」にするには、 次のコマンドを実行します。
bash
git add main.py
これで、main.py は「次のコミットに含める候補」になります。
もう一度 git status を見てみましょう。
bash
git status
出力はこんな感じに変わります。
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: main.py
ここでのポイントは、
Changes to be committed:次のコミットに含まれる予定の変更new file: main.py:新しく追加されたファイルとして認識されている
というところです。
git add の役割をイメージで
git add は、
「この変更を、次のスナップショットに含めてね」とGitに伝える操作
です。
- ファイルを新しく作ったとき
- 既存のファイルを編集したとき
- ファイルを削除したとき
それぞれの変更を、 「コミット候補」 に乗せるために使います。
git commit ― 「今の状態を、ひとつの履歴として残す」
初めてのコミットをしてみる
git add main.py で、 main.py は「コミット候補」になりました。
ここで、実際に コミット(commit) を行います。
bash
git commit -m "Add main.py with Hello Git"
-m は「コミットメッセージ」を指定するオプションです。 メッセージは、
「このコミットで何をしたか」
を短く説明するものです。
実行すると、こんな感じの出力が出ます。
[master (root-commit) 1234567] Add main.py with Hello Git
1 file changed, 1 insertion(+)
create mode 100644 main.py
これで、
main.pyが「最初のコミット」として履歴に残った- Gitの中に「この時点のスナップショット」が保存された
という状態になります。
コミット後の git status
もう一度 git status を見てみましょう。
bash
git status
出力はこうなります。
On branch master
nothing to commit, working tree clean
このメッセージは、
「今のフォルダの状態は、最新のコミットと完全に一致しているよ」
という意味です。
つまり、
- 変更はすべてコミット済み
- 未コミットの変更はない
という、とても落ち着いた状態 です。
変更を加えて、もう一度 add → commit の流れを体験する
main.py を少し編集してみる
せっかくなので、main.py に少し手を入れてみましょう。
# main.py
def main():
# Gitの練習用のメイン関数です。
print("Hello Git!")
print("Day 76: Git基礎を練習中")
if __name__ == "__main__":
main()
Pythonこのように書き換えたあと、 git status を実行してみます。
bash
git status
出力はこうなります。
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: main.py
no changes added to commit (use "git add" and/or "git commit -a")
ここでのポイントは、
modified: main.py:main.pyが編集された- まだ
git addされていないので、「コミット候補」にはなっていない
という状態です。
再び git add でコミット候補にする
編集した main.py を、 次のコミットに含めるために git add します。
bash
git add main.py
そして、もう一度 git status。
bash
git status
出力はこう変わります。
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: main.py
今度は、
Changes to be committedにmodified: main.pyが載っている
つまり、
「編集された
main.pyが、次のコミットに含まれる予定だよ」
という状態です。
2回目のコミットをする
では、2回目のコミットをしてみましょう。
bash
git commit -m "Update main.py with main() function and extra message"
実行すると、こんな出力が出ます。
[master 89abcde] Update main.py with main() function and extra message
1 file changed, 4 insertions(+), 1 deletion(-)
そして、再び git status。
bash
git status
On branch master
nothing to commit, working tree clean
これで、
- 最初のコミット:
main.pyにprint("Hello Git!")だけがある状態 - 2回目のコミット:
main()関数が追加され、メッセージが増えた状態
という、2つの履歴 がGitの中に保存されました。
Gitの「心のイメージ」をつかむ
ワークツリー・ステージング・コミット
ここまでの流れを、 少し抽象的にまとめてみます。
Gitには、ざっくり3つの「層」があります。
- ワークツリー(作業ツリー)
- 実際に編集しているファイルたち
- エディタで開いている世界
- ステージングエリア(インデックス)
git addで「次のコミット候補」に乗せた変更- 「この変更を保存したい」とGitに伝えたもの
- コミット履歴
git commitで確定したスナップショット- 過去に戻れる「タイムマシンの記録」
今日の4つのコマンドは、この3層を行き来するためのものです。
git init:このフォルダに「3層構造」を導入するgit status:今、どの層にどんな変更があるかを教えてくれるgit add:ワークツリー → ステージングエリアへ変更を移すgit commit:ステージングエリア → コミット履歴へ変更を確定する
このイメージが頭に入ってくると、 Gitの動きがぐっと分かりやすくなります。
Day 76ミニテンプレート ― 「Git一周」の練習セット
最後に、今日の内容をひとまとめにした 「Git一周練習テンプレート」 を載せておきます。
1. プロジェクトフォルダを作る
bash
mkdir day76_git_basic
cd day76_git_basic
echo 'print("Hello Git!")' > main.py
2. Gitを初期化する
bash
git init
git status # Untracked files に main.py が見えるはず
3. ファイルを追跡対象にしてコミットする
bash
git add main.py
git status # Changes to be committed に new file: main.py
git commit -m "Add main.py with Hello Git"
git status # nothing to commit, working tree clean
4. ファイルを編集して、もう一度 add → commit
# main.py
def main():
print("Hello Git!")
print("Day 76: Git基礎を練習中")
if __name__ == "__main__":
main()
Pythonbash
git status # modified: main.py
git add main.py
git status # Changes to be committed に modified: main.py
git commit -m "Update main.py with main() function and extra message"
git status # 再び clean な状態
この一連の流れを、 実際に手を動かして体験してみると、
「Gitって、変更をちょっとずつ“写真”みたいに撮ってくれるんだ」
という感覚が、ふっと湧いてくるはずです。
Day 76のまとめ ― 「Gitは、未来の自分への優しさ」
今日の主役は、
- Gitとは何か:コードのタイムマシン+履歴書+共同作業の土台
git init:このフォルダをGit管理対象にする宣言git status:今の状態を教えてくれる「現在地確認」git add:変更を「次のコミット候補」に乗せるgit commit:スナップショットとして履歴に残す
でした。
Gitは、最初はどうしても「コマンドが多くて難しそう」に見えます。 でも、今日触れた4つのコマンドだけでも、
- 変更を少しずつ記録していく
- 過去の状態に戻れる
- 「何をいつ変えたか」が分かる
という、かなり強力なメリットを手に入れられます。
そして何より、Gitは、
「未来の自分への優しさ」
でもあります。
- 「あのときの状態に戻したい」を叶えてくれる
- 「どこで壊したんだっけ?」を教えてくれる
- 「この変更はちゃんと記録されている」という安心感をくれる
Day 76でその入り口に立ったことで、 これからの実践開発が、 少しだけ、でも確実に、心強くなっていきます。

