git
git
みんな大好きgit。
外部リンク
- Pro Git - Book 公式で配ってるPro Gitという本。日本語は少し古いので英語版を読んでる。epubはたまに記号が壊れているがだいたい読める。だいたい使うのに必要な事がすべて書いてあるので最初から上級者を目指すならこの本読むだけで良い。
- Git's database internals III: file history queries - The GitHub Blog このIIIに限らず、このシリーズはPro Gitに無い部分の解説があって良い
- Git - index-format Documentation indexの内部構造。
- git rebaseでコミットをまとめたり分割する #Git - Qiita rebase -i。この辺を中級gitの解説では出来るようにしたい。
sshでなくhttpsでcloneしてしまった場合にsshにする方法
たまに必要になるのでコピペ用に書いておく。
$ git remote set-url origin git@github.com:karino2/TeFWiki-Electron.git
レポジトリにあるファイルをローカルで変更するがgit statusとかには出さない
update-indexでassume-unchangedを指定する。
$ git update-index --assume-unchanged .vscode/c_cpp_properties.json
cherry-pick用のgit logコマンド
毎回copilotに聞くのでメモしておく。
$ git log main --pretty=format:"%h %an %s"
$ git log main --author=karino2 --pretty=format:"%h %an %s"
cherry-pickで改行コードに違いがある場合
諦めてパッチファイルを作ってunix2dosしてgit amするという手順にした。
gitで改行コードが異なるレポジトリ間でチェリーピック的な事をしたい - なーんだ、ただの水たまりじゃないか
なお本来はコンテンツのみをCRLFにするのが正しい。 そこでバイナリファイルとかがあると手作業の修正が必要になる。その場合はvim -bでパッチファイルを開くと末尾のCRを編集出来る。
vim -b +'set list' mytemp.patch
また、amはコンフリクトするとapplyしてくれないので、applyコマンドを直接rejectオプションで呼び出す方が作業はしやすい。
git apply --reject mytemp.patch
駄目だった試行錯誤
git cherry-pick -x --strategy-option=renormalize XXXX
-xはコミットIDを含める、という奴。
XXXXはハッシュID。
内部コードが違う場合、これでは駄目な事が多い。
駄目だった試行錯誤2
copilotに聞いたら以下を言われた。
git add --renormalize xxx
でxxxファイルの改行コードを直すらしい。 .gitattributesの
* text eol=crlf
と組み合わせると良いと言うが、試したら駄目だった。
CI用などに空コミット
$ git commit --allow-empty -m "CIトラブルのため空コミット"
HEADのファイルのハッシュ値を取得
git rev-parseというコマンドを使う。
$ git rev-parse HEAD:some_dir/some_file.txt
コミットログを表示
ハッシュ値がXXXの時、
$ git log --format=%B -n 1 XXX
remotes/origin下の不要なブランチの削除
$ git remote prune origin
ブランチマネージメント
とりあえずリンクを貼っておく場所。
gitkのソース
gitの一部に入っている模様。tcl/tk(wish)。
ちょっといじりたいと思ったが、なかなか気力がわかないな。 誰かWebUIで同じの作って。
gitのクライアントいろいろ
- Introduction · Tig - Text-mode interface for Git ncursesのUI。生きていけそうではあるがショートカットとか覚えるのがだるい
- PowerShell Gallery - Git/Git.ps1 1.1.4.11 powershellでちょっとした事、checkoutとかはこれを参考に自分のを作るのがいいかも。
lazygit
コンソール系をいろいろ試した結果、結局これをメインにする事に。
差分の方をスクロールするのはShift+j, Shift+kでも出来る(何故かヘルプにはpageup, pagedownしか載ってないが)
リモートのブランチを最初にチェックアウトする場合はcを使う(名前でインクリメンタルフィルタリング)。
git-guiメモ
git本家のソースツリーに含まれている、tcl/tkで書かれたgit-gui。ステージングは割と良い。足りない機能を以下にメモしていく。
- 全ファイルをステージング
- ファイルのrevert(Hunkのrevertはある)
- リモートのチェックアウト
tigメモ
TigがWindowsにやってきたのでチュートリアルをまとめる #Git - Qiita
gitのターミナルUI系いろいろ
tigがなかなか良いのだが、コミット周りとかも似たようなのが欲しいなぁ、と思いいろいろ他を物色してみる。
- lazygit 少し触ったがどうもなじまなかった>その後訓練して馴染んできた
- gitui なんか良さそう?
gitui、なんかリモートのブランチをチェックアウトしようとするとディレクトリが使用中とかいって中途半端にチェックアウトされてしまう(ファイルだけ更新されてHEADが更新されてない感じ?)。
コンソールとか小さめのgitクライアントをいろいろ触ってみている - なーんだ、ただの水たまりじゃないか
入門
公式で配ってるGit - Book Pro Gitという本がとても良く書けているが、 本格的に勉強する用の本なので、入門者に薦めるのはちょっと気がひける。
入門者にとりあえずこれ見て、というには何がいいだろう?と思い、ググってよさそうだったものを貼っておく。
- 【超入門】初心者のためのGitとGitHubの使い方 - RAKUS Developers Blog - ラクス エンジニアブログ なかなかちょうど良いかもしれない
- Git でのバージョン コントロールの概要 - Training - Microsoft Learn 演習形式で進められるのがよさそう。
- Git 入門 - Training - Microsoft Learn ローカルの基本で終わってしまうが、その範囲なら良い
- Git でブランチとマージを使用してコードを編集する - Training - Microsoft Learn なかなか良い
- Git および GitHub の Microsoft Learn ドキュメントの基礎 - Contributor guide - Microsoft Learn リンク集的になかなか良い
- Hello World - GitHub Docs GitHub中心だがGitHub側の入門には良いかも。
Microsoft Learnはなかなか良い気がする。