Rails Upgrade業などで使える git command

git worktree

# git worktree add -b <branch名> <ディレクトリ>  origin/master
git worktree add -b rails6 app_rails_6 origin/master

チェックアウトしているリポジトリから、任意のブランチを別のディレクトリに切り出せる機能。

Upgrade業では、作業によって元の状態と挙動が変わっていないかを確認しながら続けてる必要があり、masterとupgrade用branchの行き来が頻繁に発生する。
これを git checkout によるブランチ切り替えで行おうとすると、そのたびに作業途中の変更を仮コミットしたりStashしたりする必要があるため非常に手間。
この手間がgit workflowを使うと不要になる(ディレクトリ移動で済むため)

なお worktreeで指定したほうにある .gitファイル( ディレクトリではない ) を見ると想像がつくが、.git/ は元のディレクトリのものを参照している。
このため作業完了時にworktreeを消そうとして、元のディレクトリを消してしまうと悲惨なことになるので気をつけてください。

git branch --contain & git tag --contain

gemを導入するとき、バグ自体は修正されているけど未リリースだったりして下のようにbranchやtag、またはリビジョンを直接指定することがある。

gem 'hogehoge', git: 'https://github.com/ghost/hogehoge', branch: 'patch-1'

このまま時間がたっていた場合、masterで入った修正などが取り込めないため早めにリリースバージョンを参照する用に戻したい。
かといって一気に最新に上げてしまうと、テストが落ちたときどこで落ちたかがわからなくなってしまう。
そのため一度「今まで指定していたコミットを含む最も古いバージョン」を使って一度確認しておきたい。

そんなときGemfile.lockに書かれてるsha1を使って git branch --contain <sha1> または git tag --contain <sha1> を使うとそのコミットが含まれるbranch、tagが一覧取得できる。
これを使うと、GitHub参照を外すときの参考になるのでオススメ