GitHubを使い始めて1週間ほど経ちましたがイマイチ流れを把握出来ていない(コマンド打っていても自分が今何をしているのかすぐにわからなくなる)ので、記事を書いて頭を整理しようと思いました。
メインは初回コミットのざっくりとした流れですが、ChatGPTが説明してくれた各コマンドの細かい説明も補足&メモ用に貼り付けてあります(後々別記事に分けたりしたいと思っています)。
あと関係無いけど、ChatGPTの回答をそのまま貼り付けたらちゃんとマークダウンもそのままで見やすくてすごい…!めっちゃ参考になるしマジでChatGPT様様すぎる。
リポジトリを初回コミットするときのざっくり流れ
1. GitHubでリモートリポジトリを作成
- GitHubのWebサイトで新しいリポジトリを作成
- リポジトリ名や公開・非公開設定を選ぶ
- 必要ならREADMEや.gitignoreを最初に作る(後から追加してもOK)
2. ローカルでGitを初期化する
- ターミナルでローカルリポジトリ(プロジェクトディレクトリ)に移動し、
git init
実行 - ローカルリポジトリに「.git」フォルダが作成され、Gitが使えるようになる
3. ファイルやフォルダをGitに追加する
-
git add .
で現在のディレクトリ内にあるすべてのファイルやフォルダを「ステージングエリア」に追加する('.'はカレントディレクトリにあるすべてのファイルやフォルダを指す) - 具体的に言うと.git/indexに変更情報が追加される。indexはバイナリファイルで、
git ls-files --stage
で中身を確認することができる
100644 1b2e1d384b8c3c63f8c8ef847c3e2b1c202345c7 0 example.txt
・100644: ファイルのパーミッション(例: 100644は普通のファイル)。
・1b2e...: ファイルのハッシュ値。
・0: ステージング状態(0は通常の状態)。
・example.txt: ファイル名。
4. 変更内容を保存する
-
git commit -m "Initial commit"
で初回コミット - 変更内容をスナップショット(完全な記録)として、 .git/objects フォルダに保存する
- .git/objects/はバイナリファイルだが、
git cat-file
で中身を確認できる(git cat-file
の使い方は後述。単にgit cat-file
を実行すると内部オブジェクト(コミット、ブロブ、ツリーなど)が全部表示されて大変なことになる) - 保存された変更は
git log
で確認できる
commit f331b1c27868559c6527d9fb16d6e61c7fbea439 (HEAD -> main, origin/main)
Author: zumomo_zzZ <kuragekyatto@gmail.com>
Date: Wed Jan 15 14:27:56 2025 +0900
5. リモートリポジトリにプッシュする
git remote add origin リモートリポジトリのURL
- 「origin」はリモートリポジトリのデフォルト名みたいなもの
-
git push -u origin main
。「-u」は「今後、このブランチ(main)とリモートのoriginをセットで扱う」って意味
以下補足っていうかChatGPTの説明貼り付け!
git cat-fileの使い方
まず、git cat-file
コマンドの基本
このコマンドは、Gitの 内部オブジェクト(コミット、ブロブ、ツリーなど)の内容や情報を確認するためのもの。使い方はいくつかあるけど、ここでは実際に中身を見るために重要なオプションを確認していく。
主なオプション
-
git cat-file -t <オブジェクトハッシュ>
- 用途: オブジェクトの「種類」を確認(commit, blob, tree, tagのどれか)。
-
例:
git cat-file -t 067352b83e6425ba96cfff1e950f3c80b8c01868
→ 出力:blob
など
-
git cat-file -p <オブジェクトハッシュ>
- 用途: オブジェクトの中身を「きれいに表示」する。
-
例:
git cat-file -p 067352b83e6425ba96cfff1e950f3c80b8c01868
→ コミットの場合はメッセージや親コミットが見えるし、ブロブ(ファイルデータ)の場合はソースコードが見える
-
git cat-file -s <オブジェクトハッシュ>
- 用途: オブジェクトのサイズ(バイト単位)を確認する。
-
例:
git cat-file -s 067352b83e6425ba96cfff1e950f3c80b8c01868
→ 出力:12345
(バイト数)
実践例
-
コミットの中身を見てみる:
git log --oneline
→ コミットハッシュの短縮版が出てくる(例:
abc123
)。
そのハッシュをフルにして使うか、git rev-parse abc123
でフルハッシュを取ってから:git cat-file -p <フルハッシュ>
→ コミットメッセージや親コミット、ツリー情報が見える!
-
ファイル(ブロブ)の中身を見てみる:
-
git ls-files --stage
でファイルのハッシュを確認 -
git cat-file -p <ファイルのハッシュ>
を実行
→ 実際のソースコードや内容が表示される。
-
ちょっとした「何が起きてるかわかる」ポイント
-
-t
: オブジェクトが何なのか(commit/tree/blob) -
-p
: 実際の中身を見る -
-s
: サイズを見る - Gitはすべて「ハッシュ」で管理している!
オブジェクトハッシュの探し方
オブジェクトハッシュがわからないと git cat-file
を実行できない。
だから、まずは「どのハッシュを使うべきか」を探る手順を知る必要がある。
Gitのオブジェクトハッシュはリポジトリ内にいっぱいあるけど、以下のコマンドで手がかりを見つけられる。
1. コミットのハッシュを取得する
git log --oneline
これで、最近のコミットの短縮版ハッシュが一覧表示される。例:
abc123 初回コミット
def456 更新しました!
これをフルハッシュにしたければ、以下のコマンドを使う:
git rev-parse abc123
→ 結果:abc123def4567890abcdef1234567890abcdef12
これが コミットオブジェクト のハッシュ。
使い方例:git cat-file -t abc123def4567890abcdef1234567890abcdef12
2. ツリーオブジェクトのハッシュを取得する
コミットは「ツリーオブジェクト」とリンクしている。コミットの中身を確認すればツリーのハッシュが見える:
git cat-file -p <コミットのハッシュ>
例:
tree 1234567890abcdef1234567890abcdef12345678
author ズモモ <zuzumomo@example.com> 1674102200 +0900
committer ズモモ <zuzumomo@example.com> 1674102200 +0900
初回コミット
ここで tree
に続いてるハッシュがツリーオブジェクトのハッシュ。
3. ファイル(ブロブオブジェクト)のハッシュを取得する
ツリーオブジェクトの中にはファイルが入ってる。以下のコマンドで確認:
git ls-files --stage
例:
100644 067352b83e6425ba96cfff1e950f3c80b8c01868 0 chat-history-2025-01-15.zip
この 067352b83e6425ba96cfff1e950f3c80b8c01868
が、ファイル(ブロブオブジェクト)のハッシュ 。
ハッシュを見つけるフローまとめ
-
git log --oneline
→ コミットのハッシュを探す -
git cat-file -p <コミットハッシュ>
→ ツリーのハッシュを探す -
git ls-files --stage
またはgit cat-file -p <ツリーハッシュ>
→ ファイルのハッシュを探す
コツ
Gitオブジェクトはすべてリンクでつながってるから、コミットから始めて順々にたどることで、ツリーやブロブのハッシュにアクセスできる!
だから、「まずコミットのハッシュを見つける」ってのがスタート地点!