基礎から学ぶPython入門 90日コース | 実践開発 - Day 76:Git基礎

Python 90日で身につけるPython
スポンサーリンク
スポンサーリンク
  1. Day 76:Git基礎 ― 「コードのタイムマシン」と仲良くなる
  2. Gitとは ― コードの「タイムマシン」兼「履歴書」
    1. Gitの役割をざっくり一言で
    2. Gitがないとどうなるか
  3. Gitの基本的な流れ ― 4つのコマンドで一周してみる
  4. git init ― 「ここから、このフォルダはGit管理します」と宣言する
    1. まずはプロジェクトフォルダを作る
    2. git init を実行する
  5. git status ― 「今、Gitから見てどういう状態?」を教えてくれる
    1. 何もしていない状態での git status
    2. git status は「今の自分の立ち位置」を教えてくれる
  6. git add ― 「この変更を、次のスナップショット候補にします」
    1. Untrackedな main.py を「追跡対象」にする
    2. git add の役割をイメージで
  7. git commit ― 「今の状態を、ひとつの履歴として残す」
    1. 初めてのコミットをしてみる
    2. コミット後の git status
  8. 変更を加えて、もう一度 add → commit の流れを体験する
    1. main.py を少し編集してみる
    2. 再び git add でコミット候補にする
    3. 2回目のコミットをする
  9. Gitの「心のイメージ」をつかむ
    1. ワークツリー・ステージング・コミット
  10. Day 76ミニテンプレート ― 「Git一周」の練習セット
    1. 1. プロジェクトフォルダを作る
    2. 2. Gitを初期化する
    3. 3. ファイルを追跡対象にしてコミットする
    4. 4. ファイルを編集して、もう一度 add → commit
  11. Day 76のまとめ ― 「Gitは、未来の自分への優しさ」

Day 76:Git基礎 ― 「コードのタイムマシン」と仲良くなる

Day 76からはいよいよ 実践開発編 に入っていきます。 その最初のテーマは、開発者ならほぼ全員がお世話になるツール、

Git(ギット)

です。

今日のキーワードはこの5つ。

  • Gitとは
  • git init
  • git status
  • git add
  • git commit

「なんだか英単語が並んでいて、ちょっと怖い…」と感じる方もいるかもしれませんが、 ひとつひとつ、落ち着いて触っていけば、 「あ、意外とシンプルなんだ」 という感覚に変わっていきます。

Gitとは ― コードの「タイムマシン」兼「履歴書」

Gitの役割をざっくり一言で

Gitを一言で言うなら、

「ファイルの変更履歴を、いい感じに管理してくれる仕組み」

です。

もう少しイメージを膨らませると、

  • コードを書き進めるたびに「スナップショット」を残しておける
  • 「昨日の状態に戻したい」「この前のバージョンを見たい」が簡単にできる
  • チームで開発するときに、「誰がどこをどう変えたか」が分かる

という、タイムマシン+履歴書+共同作業の土台 のような存在です。

Gitがないとどうなるか

Gitを使わずに開発していると、よくこんなことが起きます。

  • main.py
  • main_backup.py
  • main_backup2.py
  • main_final.py
  • main_final2.py

みたいなファイルが増殖していく、あの現象です。

どれが最新なのか分からなくなり、 「とりあえず全部残しておこう…」と、 気持ちがモヤモヤしていきます。

Gitを使うと、この「バックアップファイル地獄」から解放されます。

  • ファイル名はそのまま
  • 変更履歴はGitが全部覚えてくれる
  • 必要なときに、過去の状態を取り出せる

という、かなり快適な世界になります。

Gitの基本的な流れ ― 4つのコマンドで一周してみる

今日扱う4つのコマンドは、 Gitの「いちばん基本の一周」を作るものです。

  1. git init:このフォルダを「Git管理対象」にする
  2. git status:今の状態を確認する
  3. git add:変更を「次のスナップショット候補」にする
  4. 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!")
Python

git 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.pyUntracked 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.pymain.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 committedmodified: 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.pyprint("Hello Git!") だけがある状態
  • 2回目のコミット:main() 関数が追加され、メッセージが増えた状態

という、2つの履歴 がGitの中に保存されました。

Gitの「心のイメージ」をつかむ

ワークツリー・ステージング・コミット

ここまでの流れを、 少し抽象的にまとめてみます。

Gitには、ざっくり3つの「層」があります。

  1. ワークツリー(作業ツリー)
    • 実際に編集しているファイルたち
    • エディタで開いている世界
  2. ステージングエリア(インデックス)
    • git add で「次のコミット候補」に乗せた変更
    • 「この変更を保存したい」とGitに伝えたもの
  3. コミット履歴
    • 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()
Python

bash

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でその入り口に立ったことで、 これからの実践開発が、 少しだけ、でも確実に、心強くなっていきます。

タイトルとURLをコピーしました