Linusによって開発された分散型VCS (Version Controll System)
便利なコマンド
git remote update -p:リモートとローカルのブランチを同期?git reflog:死んだコミットをよみがえらせることが出来るかもgit log --after=2023-01-01 --pretty='%Cgreen%as%Creset %s':各コミットを1行で、日付とコミットメッセージの1行目だけ表示git log --graph --format=reference --all:全ブランチの履歴を1行にして、グラフっぽい表示にする--pretty='%Cgreen%as%Creset %Cblue%h%Creset %s'が良いのではと思っていた時代があった- それより前は
--onelineを使っていたが、これだと日付が表示されない - しかしこんな長いフォーマットを毎回書いていられない
- 日付を表示したいのであれば
referenceが一応出してくれるので- ただ順番が hash, コミットタイトル, 日付 になるのでちょっと見づらい
- それより前は
git reset --mixed HEAD~:コミットされる前の状態に戻る- そのコミットによって発生していたdiffはunstageされた状態となる(mixed)
HEAD^でも良い(違いはGitのHEADとresetで述べている)
git commit --amend:1つ前のコミットについて、ステージングしている編集を適用したり、メッセージを修正したりできる- n個前のものを編集する場合は
git rebase -i HEAD~nして、これ↑をやってからgit rebase --continueする - コミットメッセージを変更しない場合は
--no-editを付けるとメッセージ編集をスキップできる
- n個前のものを編集する場合は
git filter-branch --tree-filter "if [[ -e <dir0> && <dir1> ... ]]; then find <dir0> <dir1>... -type f | xargs -L1 sed -i '/STR/d' ; else true; fi" HEAD --all- 過去にコミットしたファイルから任意の記述を削除する
dir0とかSTRを置き換えるだけinc/*.hとsrc/*.cに書かれた行を削除したかった時に用いたgit reflog expire --expire=now --allとかgit gc --aggressive --prune=nowもしたほうが良いらしい
- git add -i
- インタラクティブなgit add
- プロンプトが表示され、diffをみたり(6: diff)、一部箇所をaddしたり(5: patch)できる
- patchではハンク単位でステージしたり、ハンクをエディターで編集して残した部分だけステージしたりできる
- git add -p
- 前述のpatchでステージするモードに入る