Git基礎コマンド一覧の先へ。ここから先は、覚えるものというより「こういうことができる」と知っておくものです。名前を伝えれば、あとはエージェントがやってくれます。
「ハッシュ」というのは、コミット1つ1つに付いているa1b2c3dのような記号です。git logで確認できます。
⚠️ 履歴を書き換えるものと、書き換えないもの
応用編でいちばん大事なのは、ここです。 コマンドの意味より先に、この線を知っておいてください。
| どうなるか | |
|---|---|
書き換えない(revert・stash・cherry-pick) |
新しいコミットが増えるだけ。やり直しても、なかったことにはならない |
書き換える(reset --hard・rebase・commit --amend) |
過去のコミットそのものが作り直される。同じ履歴が二度と再現できなくなる |
そして鉄則がひとつあります。
一度pushしたものの履歴は、書き換えない。
自分のパソコンの中だけなら、失敗しても自分が困るだけです。でも送ったあとに書き換えると、それを前提に作業している人(あるいは別の場所で動いている自分)と食い違います。 直したいときは、resetではなくrevert——打ち消すコミットを新しく足すほうを選んでください。
削除してしまった、と思ったらreflog
「間違えて削除した」の大半は、まだ戻せます。
git reflog
これは「自分がどこにいたか」の移動記録です。resetで吹き飛ばしたつもりのコミットも、ここには残っています。表示されたハッシュを指定すれば、その時点に戻れます。
慌てて操作を重ねる前に、まずこれを打ってください。 そして、この状況こそエージェントに相談する場面です。「git reset --hardしてしまった、さっきの状態に戻したい」と言えば、reflogを読んで手順を示してくれます。
コマンド名ではなく、「こうしたい」を言えば足ります
ここが応用編の本題かもしれません。これらのコマンドは、名前と使い方を暗記するものではありません。
やりたいことを日本語で言えば、エージェントが選びます。
| こう言えば | だいたいこれになります |
|---|---|
| 「この変更だけ、別のブランチにも入れたい」 | cherry-pick |
| 「作業中だけど、いったん別の用事をやりたい」 | stash |
| 「さっきのコミット、なかったことにしたい」 | revert か reset |
| 「コミットメッセージを書き間違えた」 | commit --amend |
| 「最新のmainに追いつかせたい」 | rebase か merge |
| 「この行、いつ誰が入れたの?」 | blame |
難しいのはコマンドを打つことではなく、どれを選ぶかの判断です。そこは経験がものを言う領域で、エージェントはその経験を持っています。
ただし、丸投げしきらないための一線があります。エージェントがrebaseやreset --hardを提案してきたら、「それ、もうpushしてある?」と自分で確認してください。 上の鉄則に関わる判断で、そこだけは状況を知っているあなたのほうが正確です。
GUIアプリで、目で見て確かめる
コマンドと同じくらい大事なのが、変更を目で見ることです。
git diffでも差分は読めますが、ファイルが増えてくると追いきれません。 Gitを画面で扱うアプリを1つ入れておくと、ここが一気に楽になります。変更前と変更後が左右に並び、どの行が増えてどの行が削除されたかが色で分かります。
エージェントと組むときに、これが助けになります。エージェントは一度にたくさんのファイルを書き換えるので、「何をされたのか」を文章の報告だけで把握するのは無理があります。 目で見れば数秒です。
そして——差分が見えるのはプログラムだけではありません。 文章もそうです。このサイトのような文章の集まりでも、「どこを直したのか」が行単位で並んで見えます。
ここが、脱初心者の分かれ目だと思います。最初は「エージェントに任せて、動けばよし」で構いません。でも続けていくと、中身を自分の目で確かめる場面が必ず来ます。 そのとき、差分を見ることに慣れているかどうかで、進み方がまるで変わります。
どのアプリを入れるかは、エージェントに「今どれがいい?」と聞くのがいちばん早いです。使っているOSや、無料かどうかも含めて答えてくれます。
関連
- Git基礎コマンド一覧 — まずはこちら
- Git基本的な使い方(ワークフロー) — 一連の流れ
- ブランチとは何か / マージコンフリクトとは何か、なぜ起きるか — 概念のほう