ryhmrt’s blog

意識低い系プログラマの雑記

Git 2.4

一週間ぶりくらいにMacPortsを更新したらGitの2.4が振ってきた。

Gitは既に誕生から10年を迎えたらしい。前職から使ってたから自分が使っている期間もそこそこになる。

Atomic Pushes

複数のブランチをpushするときに、一つでもpushが失敗したら他のpushも取り下げるようなことができるようになった。--atomicオプションを使用して以下のようにpushする。

$ git push --atomic origin branch1 branch2 ...

Push-to-deploy の改善

Git 2.3 で導入されたPush-to-deployについて以下の改善が施された。

  • push-to-checkoutフックの追加により、pushされたブランチに対してサーバ側のワーキングツリーに変更があった場合の挙動を定義できるようになった。
  • コミットが一つもないブランチに対してもPush-to-deployが正常に設定できるようになった。

自分はPush-to-deployをまだ使ったことがないので、これらの改善点の嬉しさがいまいちわからない。

git log の --invert-grep オプション

git log コマンドのオプションの --grep=<pattern>, --author=<pattern>, --committer=<pattern>, --grep-reflog=<pattern> それぞれのパターンに一致しないものを検索するためのオプション --invert-grep が追加された。

例えば以下のようにして、自分以外のコミットを確認できる。

$ git log --invert-grep --author=Ryohei

該当するコミットのSHA-1ハッシュだけをリストする git rev-list コマンドをネストすることで、複雑な検索が可能になる。

以下はRyohei、Keisuke、Gissan以外のコミットを検索するコマンド。--stdin--no-walk オプションと共にパイプして、最後だけ git log にする。

$ git rev-list --no-merges --invert-grep --author=Ryohei master |
      git rev-list --stdin --no-walk --invert-grep --author=Keisuke |
      git log --stdin --no-walk --invert-grep --author=Gissan

git status -vv

git status コマンドに -v オプションを2つ付けると、コミットされていない変更差分が一緒に出力されるようになった。git status に続けて git diff --cachedgit diff が出力されてる感じ。

参照

自分は一時情報としてブログ記事 Git 2.4 — atomic pushes, push to deploy, and more を参照しました。

詳細はGit 2.4 リリースノートを参照。