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を使うそうです。私はトラブってよく分からなくなることが多いのであまり使っていませんが重宝するケースも多いはず

git のタグのrefspecが覚えられないので糖衣構文を使う

 

  •  困っていたこと
    • git の annotated tag はちょっと特別で、ブランチと混ざったりしないように refspec で書いた方が良いというのがある。でも、長くてめんどい。
    • git fetch origin refs/tags/v6.6.139:refs/tags/v6.6.139
  • 解決方法
    • 糖衣構文的な表記があるのでこれを使う。ちょっと分かりにくいが"tag " というのがそれ。
    • git fetch $remote tag  v6.6.139
      • 古いバージョンも引き連れてきてしまうのは、--no-tags オプションをくっつければ、v6.6.139 のタグだけをフェッチできる
    • man git-fetch (1) に記載がある。 https://git-scm.com/docs/git-fetch
      • $remote tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>

git tag を fetch する時に、含まれている過去のタグを全部引っ張て来てしまうのを防ぐ方法

  •  困っていたこと
    • 例えば、git fetch $remote v6.6.139 としたときに、 v6.6.138 以下も全部自動でフェッチされる
    • git tag とリストした時に大量に使わないタグが列挙されてしまう
  • 解決方法
    • -n / --no-tags オプションを付ける。git fetch --no-tags  $remote v6.6.139
    • タグ要らないという印象を受けるが、Automatic tag following と呼ばれる機能を止めるというオプションである
    • man git-fetch (1) に記載がある。 https://git-scm.com/docs/git-fetch
  • なぜ自動でフェッチするのか?
    •  過去リリースのタグとかも辿ったりするだろうからという親切機能らしい

2026年1月11日日曜日

映画 爆弾 を観た


ちょろちょろとCMが目に入り、取調室であんな感情的なやり取りしないじゃんと思ってしまい自分には合わなそうだなーと思ってスキップしていたが、何人からおススメされたので先日行ってきました。

感想はやっぱりストーリーラインが合わないなという感じですが、トイレ行きたくなるぐらいの長尺なのに退屈なることなく楽しめました。あんなにしゃべりっぱなしなのはびっくりですね。映像もだいぶ明るさを落とした濃ゆい雰囲気が漂っていて良かったです。主人公(?)のスズキタゴサクの正体が不明なのはこの作品の軸だと思うので構わないと思うのですが、その周辺キャラも色々訳ありそうなのでその辺りが深堀りされて世界観が分かりやすいと嬉しいなと思いました。原作が読みたくなる味。

割と突拍子もない設定だとは思うしあんな風にふるまう人間はそんないないわけですが、演者によって世界観が成立するというのはほんとすごいなーと思います。(半沢直樹シリーズとかも近い)

関係ないですけど、 おぉ、ワーナーブラザーズが配給じゃないか!と最初のイントロで思いました。2025年いっぱいで配給終了しているんですよね。上映時間は137分らしいので2時間ちょっと。2時間を超えるとちょっと辛くなってくる今日この頃。


2025年12月28日日曜日

映画 アバター:ファイヤー・アンド・アッシュ を観た

 アバター:ウェイ・オブ・ウォーター (アバター2) は個人的に微妙だったので、あまり行くつもりは無かったのですが誘われてまぁ観ておくかぐらいの感じでした。前作は水で今作は炎の土地に行くのかな?と思ったら全然そんなことは無かった。ストーリーライン含めてだいぶ前作と似ているのですがもっと分かりやすくやっている感じ。大佐そんなキャラだっけ…みたいのはありますが好印象な改変ではあります。今作だけ見てもほぼ問題ないような構成でした。

綺麗で迫力ある映像と爽快なBGMに反してやっていることは戦争映画より戦争で個人的には中々のショックを良い意味で受けました。

全編がっつり3Dが設定されているのは、ゲームエンジンというかほとんどがそもそも合成だからその辺りは自然にあるんですよね。3D表現は最初の15分は違和感ありましたがその後は慣れました。ところどころハイフレームレートにしているのかその辺りはPS5のゲーム映像みたいでした。これはあまり褒め言葉ではないです。ただ、映画で最新映像をばこーんと見れるというインパクトは良かったです。上映時間は驚異の3時間越えですが、分かりやすくセクションが切られていてダレることもなく楽しめました。ただ、眼精疲労がえぐい。個人的にはやっぱり3Dよりは明るさ・ダイナミックレンジを優先して欲しいなと思いました。まぁこの辺は映画でしか体験できない3Dという位置付けでも成立するのかもしれません。

今回は時間の都合で相当久しぶりに吹替で見ました。吹替の3D-IMAX!これは大正解でした。とにかく映像がぐるんぐるんと動くので字幕を追うのは大変だったと思います。これ全員(?)言ってることだと思いますが字幕だと暗いシーンが明るくなってしまうのでそういった点でも有利なんですよね。

ところで、Wikipediaによるとアバター4は2029年、さらにアバター5は2031年に予定されているそうです。え、アバター5までやるの!?