戻ることのできる履歴
Git は、プロジェクトの履歴をコミットの連なりとして記録します。コミットは追跡中の全ファイルのスナップショットで、作者・時刻・メッセージが付きます。何がなぜ変わったかを確認でき、安心して新しい案を試し、動いていた版に戻れます。Git の管理下にあるフォルダーがリポジトリです。クオンツの仕事ではとりわけ重要で、どのバージョンのコードが結果を出したかを正確に言えて初めて、その結果を信頼できます。
# Start tracking a project (once)
git init
# See what changed, stage it, record it
git status
git add main.py README.md
git commit -m "Add the first backtest loop"
# Look back
git log --oneline
git diff # changes not yet staged変更が存在する3つの場所
変更は3つの領域を通ります。ファイルは作業ツリーで編集します。git add は選んだ変更をステージングエリア(準備中の次のスナップショット)にコピーし、git commit はステージ済みのスナップショットをリポジトリの履歴に記録します。多くのファイルを編集していても、関連する変更だけをまとめてコミットできます。git status は各ファイルがどこにあるかを示します:変更あり、ステージ済み、未追跡(新しく、まだ Git に知られていない)。
# git status --porcelain prints two status letters, a space, then the path
status = """ M main.py
A notes.md
?? scratch.txt
D old.py"""
for line in status.splitlines():
code, path = line[:2], line[3:]
print(repr(code), path)
# ' M' main.py (modified, not staged)
# 'A ' notes.md (new, staged)
# '??' scratch.txt (untracked)
# 'D ' old.py (deleted, staged)ブランチ
ブランチは、コミットの流れにつける動かせる名前です。アイデアや修正ごとに作り(git switch -c fee-model)、自由にコミットし、うまくいったら git merge で本流に取り込みます(通常は main ブランチから)。ブランチ名には英数字、-、_、/、. を使えますが、空白や ~ ^ : ? * [ \ は使えず、先頭や末尾を / にしたり、末尾を . にしたりもできません。2つのブランチが同じ行を変更すると Git が競合を知らせるので、手作業で解決します。
# Try an idea on its own branch, then bring it back
git switch -c fee-model
git commit -am "Use tiered fees"
git switch main
git merge fee-model
# List branches (the current one has a star)
git branch含めないものと、元に戻す方法
.gitignore ファイルには、Git に追跡させたくないパターンを書きます:.venv/(末尾にスラッシュを付けたフォルダー)、*.log(ワイルドカードに一致する任意のファイル)、secrets.env など。仮想環境、キャッシュ、大きなデータファイル、そして何より API キーなどの秘密情報は含めないでください。一度コミットしたものは、後で削除しても履歴に残ります。元に戻すには、git restore file でコミット前の編集を破棄し、git revert <commit> で古いコミットを打ち消す新しいコミットを追加します(共有ブランチでも安全です)。git push と git pull は、GitHub などのリモートのコピーとコミットをやり取りします。
# .gitignore
.venv/
__pycache__/
*.log
secrets.env
# Undo safely
git restore main.py # drop uncommitted edits to one file
git revert 3f2a9c1 # new commit that cancels an old one
# Share
git push origin main
git pullgit log --oneline が読みやすくなります。キーやパスワードをコミットしてしまったら、漏えいしたものとして扱い、無効化してから履歴から取り除いてください。git init、git status、git add、git commit -m "..."、git log --oneline- アイデアごとにブランチ:
git switch -c nameのあとgit merge .venv/・キャッシュ・データ・秘密情報は.gitignoreに書く。元に戻すにはrestoreかrevert
次は Jupyter ノートブックです。データを対話的に探索する方法と、Git の下で整理して保つ方法を学びます。
ラボ:採点される内容
parse_statusでgit statusの出力をファイル種別に分類する25点parse_logでgit log --onelineの出力を読み取る25点is_valid_branch_nameでブランチ名が Git の規則に合うか調べる25点not_ignoredで.gitignoreをファイル一覧に適用する25点