入社1年でやらかしながら覚えたGit/GitHubの使い方メモ
はじめに
エンジニア2年目です。1年目のときにGitで何回かやらかして(mainに直push、reset --hardで作業消失など)、その度に先輩に助けてもらいながら覚えたことをまとめます。
当時の自分が読みたかった記事を目指して書くので、同じく「Gitなんとなく使ってるけど怖い」という人の参考になれば嬉しいです。
まずこれだけ覚えれば生きていける
正直、日常の9割はこれです。
git status # 迷ったらとりあえずこれ。1日50回くらい打ってる
git add .
git commit -m "メッセージ"
git push
git pull
git status は本当に癖にした方がいいです。自分は「今どのブランチにいるか確認せずcommitしてmainを汚す」を2回やりました。
ブランチまわり
mainで直接作業しない、はチーム開発の鉄則でした(1敗)。
git switch -c feature/login # ブランチ作って移動
git switch main # mainに戻る
git branch # 一覧
ちなみに自分はずっと git checkout -b で覚えてたんですが、先輩に「今は switch と restore に分かれてるよ」と教えてもらいました。checkoutは多機能すぎて事故りやすいので、これから覚える人はswitchがいいと思います。
やらかしたとき用コマンド
ここからが本題です。全部実体験あります。
commitメッセージをtypoした
git commit --amend -m "正しいメッセージ"
push前ならこれでOK。あと「add忘れたファイルがあった」ときも、
git add 忘れたファイル
git commit --amend --no-edit
で直前のコミットに混ぜられます。これ知ってから「fix: add忘れ」みたいな恥ずかしいコミットが消えました。
commitを取り消したい
git reset --soft HEAD~1 # push前。変更は残る
git revert コミットID # push後はこっち
push済みのものを reset して force push すると他の人の環境が壊れるので、push後は revert 一択です。これは先輩に口を酸っぱくして言われました。
作業途中で別ブランチを触る必要が出た
git stash # 一時退避
git stash pop # 戻す
「急ぎでこっちのバグ見て」って言われたときの必須コマンド。最初の頃はわざわざWIPコミットを作ってました…。
全部消えた(ように見える)
git reflog
これは本当に命を救われたコマンドです。reset --hard を間違ったコミットに対してやってしまい、半日分の作業が消えて青ざめたんですが、reflogでHEADの履歴を見て
git reset --hard HEAD@{2}
で戻せました。Gitはcommitさえしていればだいたい戻せるので、こまめなcommit大事です。
地味に便利だったやつ
log を見やすくする
git log --oneline --graph --all
毎回打つのは長いのでエイリアスにしています。
git config --global alias.lg "log --oneline --graph --all"
これで git lg で呼べます。ブランチの分岐が図で見えるので、mergeやrebaseの理解がだいぶ進みました。
add -p
git add -p
変更をかたまりごとに確認しながらaddできます。「リファクタとバグ修正を1コミットに混ぜるな」とレビューで言われてから使い始めました。
.gitignoreが効かない問題
.gitignore に追加したのに無視されない、というのは大体すでにgit管理下に入っているのが原因でした。
git rm --cached ファイル名
で追跡を外せば効くようになります。.env をpushしかけたときにお世話になりました(pushする前に気づいてよかった…)。
pullで余計なマージコミットができる
git pull --rebase
普通の git pull だと "Merge branch 'main' of ..." みたいなコミットができて履歴が汚れがちですが、--rebase を付けるときれいに取り込めます。
GitHub側の小ネタ
- リポジトリページで
tキー → ファイル名検索。ファイルツリーを掘らなくてよくなる - リポジトリページで
.キー → ブラウザでVS Codeが開く。ちょっとした確認に便利 - PRはとりあえず Draft で作っておくと、途中でも方針相談ができる
- 初回pushは
git push -u origin ブランチ名。-uを付けておくと次からgit pushだけでいい
おわりに
Gitは最初「よく分からないけど壊したら怖いもの」でしたが、reflogの存在を知ってからは気楽に触れるようになりました。commitしてれば戻せます。
他にも「これ知らないの?」みたいな小技あればコメントで教えてください🙏