💡 Key Takeaways
- The 3 AM Production Crisis That Changed How I Teach Git
- The Daily Workflow Commands: Your Bread and Butter
- Branch Management: Keeping Your Work Organized
- The Time Machine Commands: Undoing Mistakes
私がGitを教える方法を変えた3時のプロダクション危機
私のチームのジュニアデベロッパーが、午前3時に誤ってプロダクションに強制プッシュを行い、5人の異なるエンジニアの3週間の作業を消してしまった夜を忘れることはありません。私はシードBのフィンテックスタートアップでエンジニアリングのVPをしており、その時点でプロとして14年間コーディングをしていました。私はすべてを見てきたと思っていました。しかし、私たちの監視システムがクリスマスツリーのように光る中、パニックメッセージで爆発するSlackチャンネルを見て、重要なことを学びました:ほとんどの開発者は実際にはGitを知らないのです。彼らは、うまくいくまでStack Overflowからコマンドをコピー&ペーストする程度の知識しか持っていません。
💡 主要なポイント
- 私がGitを教える方法を変えた3時のプロダクション危機
- 日常のワークフローコマンド:あなたの基本
- ブランチ管理:作業を整理する
- タイムマシンコマンド:ミスを取り消す
その事件は、約47,000ドルの失われたエンジニアリング時間を費やし、大きなクライアントのローンチをほぼ台無しにしました。しかし、それは私のGit教育のアプローチを完全に見直すきっかけにもなりました。次の6ヶ月間、私は3社でコンサルタントを務める200人以上の開発者のGit使用パターンを分析しました。私は、彼らが日常的に使用するコマンド、繰り返しGoogleで検索するコマンド、そして最もダメージをもたらす誤解を追跡しました。
結果には驚かされました。平均的な開発者は、定期的に使用するGitコマンドはわずか12〜15個でありながら、ほとんどのチュートリアルは50以上を教えようとしています。一方、実際に災害を防ぐコマンド(reflogやresetなど)はほとんどカバーされていません。過去8年間で1,500人以上の開発者をトレーニングした結果、私は実際のシナリオの99%をカバーする20のGitコマンドに絞り込みました。コードレビューでスマートに見えるコマンドではなく、物事がうまくいかないときに実際に仕事を救うコマンドです。
これは、もう一つの包括的なGitリファレンスではありません。私が始めたときに持っていればよかった、実際の問題に基づいて整理されたチートシートです。アルファベット順や理論的完全性ではなく。ここにあるすべてのコマンドは、少なくとも一度は私や私のチームを重要な状況から救ってきました。その中のいくつかは、何度も私たちを救ってくれました。
日常のワークフローコマンド:あなたの基本
では、毎日必ず使う5つのコマンドから始めましょう。これらはあまりにも基本的で、筋肉の記憶になってしまうべきです。開発者がこれらの基本操作に20〜30分を無駄にするのを見てきました。これは年間約120時間(つまり、3フルワークウィーク)にもなり、一人当たりの生産性の損失につながります。
平均的な開発者は、定期的に使用するGitコマンドはわずか12〜15個でありながら、ほとんどのチュートリアルは50以上を教えようとしています。災害を防ぐコマンドに焦点を当てるべきです。コードレビューでスマートに見えるコマンドではありません。
git statusは、あなたの常にそばにいる相棒です。私は恐らく1日に40〜50回このコマンドを実行していますし、2011年からGitを使っています。それは、どのファイルが変更されたのか、ステージされているのか、追跡されていないのかを示します。ほとんどの開発者が見落とす重要な洞察:statusは何が変更されたかを確認するためだけのものではなく、全てのコミット、プッシュ、ブランチ切り替えの前の安全ネットです。破壊的なコマンドをエンターキーを押す前に、statusをもう1回実行することで無数の間違いを防いできました。
git addはファイルをコミットするためにステージします。最も便利な変種は、git add .(現在のディレクトリ内のすべてをステージする)、git add -A(削除を含むすべての変更をステージする)、git add -p(対話式ステージング)です。最後のコマンドは非常に使われていません。対話式ステージングを使用すると、3時間コーディングしていて、複数の観点で変更を加えた場合に、チャンクごとに変更をレビューしてステージすることができます。このことは、別々のコミットにすべきです。
git commit -m "message"は、ステージされた変更でコミットを作成します。ここに、私が5年かかって学んだプロのヒントがあります:git commit -vを使うことです。-vフラグは、コミットメッセージを書いている間にdiffを表示し、メッセージの質を劇的に改善します。チームがこのプラクティスを採用すると、コミットメッセージの質は約60%向上しました。良いコミットメッセージは、6ヶ月後に何が変わったのかを理解しようとする際のデバッグを容易にします。
git pushは、あなたのコミットをリモートリポジトリに送信します。知っておく必要がある変種は、git push -u origin branch-name(新しいブランチの初回プッシュ)です。-uフラグはトラッキングをセットアップするので、その後のプッシュは単にgit pushで済みます。私は開発者がこのことを誰も説明しなかったため、毎回フルコマンドを手動で入力しているのを見てきました。
git pullはリモートから変更を取得してマージします。しかし、私が実際に使用するコマンドはgit pull --rebaseです。これにより、マージコミットを作成するのではなく、リモートの変更の上にローカルのコミットを再生することで、コミット履歴がよりきれいになります。デフォルトでrebaseに切り替えた後、私たちのチームのコミット履歴は70%読みやすくなり、git logやgit blameがデバッグに実際に役立つようになりました。
ブランチ管理:作業を整理する
ブランチはGitの力が本当に発揮される場所ですが、混乱も増えます。私は、誰もきちんと掃除する方法を知らなかったため、300以上の古いブランチを持つコードベースを見たことがあります。この4つのコマンドは、あなたのブランチ管理をきれいでプロフェッショナルなものに保つでしょう。
| コマンドカテゴリ | 日常使用 | 危機的価値 | 一般的な間違い |
|---|---|---|---|
| 基本操作(追加、コミット、プッシュ) | 毎日10〜20回使用 | 低 | 間違ったブランチにコミットする |
| ブランチ管理(チェックアウト、マージ、ブランチ) | 毎日5〜10回使用 | 中 | 最初にプルせずにマージする |
| 履歴ナビゲーション(ログ、差分、ステータス) | 毎日8〜15回使用 | 中 | コミット前にステータスを確認しない |
| 災害復旧(reflog、reset、revert) | 毎週1〜2回使用 | 重要 | バックアップなしでreset --hardを使用する |
| リモート同期(プル、フェッチ、クローン) | 毎日3〜8回使用 | 高 | 共有ブランチに強制プッシュする |
git branchはあなたのローカルブランチをリスト表示します。リモートブランチも表示するには、-aフラグを追加します:git branch -a。本当に便利な変種はgit branch -vvで、各ブランチの最後のコミットとトラッキング情報が表示されます。これにより、削除できる古いブランチを特定するのに役立ちます。私はこれを毎週、ブランチの衛生管理ルーチンの一環として実行しています。
git checkout -b branch-nameは、新しいブランチを作成し、1つのコマンドでそれに切り替えます。これは、作成してから切り替えるという2ステップのプロセスよりも早いです。Git 2.23以上では、より直感的な新しい構文がgit switch -c branch-nameですが、checkoutもまだ機能しており、広く知られています。私はキャリアの中でおそらく10,000以上のブランチを作成しており、このコマンドは毎回約5秒を節約します—それだけで14時間の節約です。
git checkout branch-nameは既存のブランチに切り替えます。再度、git switch branch-nameが現代の同等物です。覚えておくべき重要なこと:必ず変更をコミットまたはスタッシュしてからブランチを切り替えてください。未コミットの変更でブランチを切り替えたために、開発者が何時間も失うのを見たことがあります。Gitは切り替えを拒否するか、変更を間違ったブランチにマージしました。
🛠 私たちのツールを探検する
git branch -d branch-nameはローカルブランチを削除します。マージされていないブランチを強制削除するには、-D(大文字のD)を使用します。プルリクエストをマージした後、私は作業スペースをきれいに保つためにローカルブランチを即座に削除します。リモートブランチは、あなたのGitホスティングプラットフォーム(GitHub、GitLabなど)を通じて削除されます。常に10未満のアクティブなローカルブランチを維持することで、認知負荷が軽減され、誤って間違ったブランチにコミットすることを防ぎます。
タイムマシンコマンド:ミスを取り消す
このセクションには、あなたのキャリアを救うコマンドが含まれています。私は誇張していません。全てのシニア開発者が知っているべきことです。