2026年5月20日水曜日

git tips集

同僚と盛り上がって思ったよりもたくさんあったな~ということで垂れ流します。
  • git reflog
    • やっちまったー!という時もだいたいこれで戻せます。コミットしてないものは戻せません 
  • git switch - 
    • git-switchはブランチを移動するためのサブコマンド。動作としては、cd - と同じようにブランチを一個前のに移動できる。つまり、git switch - を2回実行すると元に戻ってくる。 地味に知っていると便利なことが多い
  • git show $branch:$file > $newfile_name
    • あ~~、隣のブランチにあるファイルを確認したり手元にコピーしたいんだけどな~~~~。3週間にいっぺんぐらいありますよね?
    • git worktree や、git checkout $branch; cp $file$newfile_name; git switch -  とか3段階踏まなくてもshowサブコマンドで直接取り出せます。コミットID指定でも取り出せます。
    • git cat-file -p $branch:$file > $newfile_name と同じです
    • 同じファイルパスに書くならば git restore --source=$branch $file  (昔の git checkout $branch -- $file)
  • git log --merges (マージだけリストアップする)
    • MR (Merge Request) で埋もれてうっとい時に使う --no-mergesは有名かと思います。
    • その逆であるマージしか見ないという使いどころがあんまり無さそうなオプションですが、これは忘れてしまったMRを見つけ出したいときに重宝します。
  • git-stash 
    • ちょっとはじに避けたいときに使うのがstashサブコマンド。スタック構造で管理できるので使いこなすと便利…。
    • しかし、個人的には branch を作ってコミットした方が無難でdiffも取りやすいのでstashは非推奨と言っていたりします。
  • git clean -df && git reset --hard HEAD
    • 管理外のファイルをきれいさっぱりにする必殺コマンド。デンジャー
    •  ただし、罠があって構成管理が適切にされていないと壊れたワーキングディレクトリに早変わりします。HEADの状態に戻す操作もセットで行っておくのが無難。
  • git config --global alias.st status
    • エイリアスを作れることは有名かと思いますが、git st は人生が変わるので、カスタマイズは極力しない派のあなたも是非騙されたと思ってやってみてください。
  • git log --oneline --left-right $a...$b
    • 左右(さゆう)はワンラインとトリプルドットのお友達 と覚えましょう。
    • 私はよく右左で間違えていました
    • 腐ったブランチ構成を発見したり思わぬミスが見つかることがあります。
  • autosquash
    • コミットをしておいて無駄なことはないですが整理するのめんどくさいな~という方もいるかもしれません。
    • git commit --fixup と git rebase --autosquash でだいたい解決すると思います。達成感がなぜかあり気持ちいいです。
  • ours/theirs
    • 上級者向け。 日頃のmergeやrebaseで疲れている方は、ours/theirs を学ぶ頃合いかもしれません。
    • 比較的直観的な動作をしますが、サブコマンド毎に動作が違うので man や SCM を丁寧に読んで操作しながらマスターしましょう。
  • git worktree
    • git clone を何個も作っていたり、git checkout でブランチを切り換えるのが多すぎる人は知っておくと良いかもしれません。
  • ちゃんとpushできたかサクッと確認したい 
    • git clone --filter=blob:none <url>
    • 一見奇妙なこのオプションは blobless clone と呼ばれています。ダウンロード時間を短くできTAT改善できます。git log は全部見えるけど実態は手元にないという形でクローンすることができます。
    • https://github.blog/jp/2021-01-13-get-up-to-speed-with-partial-clone-and-shallow-clone/
  • git blame は生ではあまり使えない
    • blameは調査に必須ですが、サブコマンドのままではあまり使い物になりません。次々に辿ったりしたいことが多いでしょう。
    • お使いのエディタ + git-blame 等でググってベストプラクティスを探しましょう。(vim なら vim-fugitiveとか)
    • tig コマンドが提供する tig blame も扱いやすいです。
  • git pull --prune
    • 分散性を優先しているので一度fetchしたものは手元に残り続けちゃいます。もうGitLab側から消えているtopicブランチのトラッカーが残りっぱなしだったりしませんか?
  • カレントディレクトリじゃないところのリポジトリを操作をする git -C $repo_path $command
    • あんまり使いどころがなさそうに見えますよね? スクリプトと組合わせると便利なんです。
  • git sumobdule foreach $command
    • サブモジュールを使う羽目になってしまったあなた。foreach サブコマンドを使うと管理されているサブモジュールに対して -C と同じ動作をするので便利です。
Linuxカーネル開発向け
  • linuxカーネルにおけるコミットIDの長さは12桁以上で書く
    • デフォルトの7桁では特定不十分なケースがよくあります。どっかのドキュメントに記載があったはずですが忘れました
    • config に次のようにしておくといつでもいい感じになります。
    • [core]
    •         abbrev = 12
  • Linux kernel のクローンが遅い
    • グーグルのほうを使うと世界のどこにいても早いという噂があります。
    • https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux.git
  • ローカルリファレンスを使う
    • git clone --bare linux-stable.git linux.bare; git clone --reference linux.bare scel.git linux-xyz
    • 内部でreflinkを使うそうです。私はトラブってよく分からなくなることが多いのであまり使っていませんが重宝するケースも多いはず

0 件のコメント:

コメントを投稿