SODA Engineering Blog
🐥

Gitの活用できていない機能はない?

2024/09/30に公開

こんにちは。FEチームのMapleです。私たちのチームは、現在のシステムアーキテクチャを見直し、Reactを用いた新しいアーキテクチャへの移行を検討しています。今回はGitの活用できていない機能はないのか振り返ってみました。

はじめに

  • もちろん忘れていない!って方も多いと思うのですが、今回は初心に立ち戻って読んでみてください!

git reflog

git reflogは、Gitが記録しているローカルリポジトリ内の全てのHEADの移動履歴を表示します。誤ってブランチを削除したり、リセットした場合でも、reflogを使って元の状態に戻すことができます。

# reflogの表示
git reflog

# 過去のコミットに戻る
git checkout HEAD@{5}

応用例

  • 削除してしまったブランチの復元
# 削除前のコミットハッシュを確認
git reflog

# ブランチを復元
git branch 復元したいブランチ名 コミットハッシュ

git bisect

git bisectは、バイナリサーチを利用して、バグを導入したコミットを特定するためのツールです。大量のコミットの中から問題の原因を効率的に見つけ出すことができます。

# bisectの開始
git bisect start

# バグのあるコミットを指定
git bisect bad

# 正常に動作していたコミットを指定
git bisect good コミットハッシュ

# 現在の状態をテストし、結果を入力
git bisect good  # または git bisect bad

# バグを導入したコミットが特定されるまで繰り返す

# bisectの終了
git bisect reset

応用例

  • 次のようなスクリプトを実行してgood badを判定します。
git bisect run ./test-script.sh

git worktree

git worktreeを使うと、一つのリポジトリから複数のワーキングツリーを作成し、異なるブランチを同時に作業することができます。

# 新しいワークツリーを作成し、ブランチをチェックアウト
git worktree add ../path/to/new-worktree ブランチ名

# ワークツリーの一覧を表示
git worktree list

# ワークツリーの削除
git worktree remove ../path/to/new-worktree

応用例

  • レビュー用に別ブランチをチェックアウト
    • 作業中のブランチを切り替えることなく、別のブランチをチェックアウトしてコードレビューが可能。

git rerere

git rerere(reuse recorded resolution)は、一度解決したマージコンフリクトを記録し、次回以降同じコンフリクトが発生した際に自動的に解決してくれる機能です。

# rerereを有効化
git config --global rerere.enabled true

# 以降、コンフリクトの解決履歴が記録される

応用例

  • 長期的なブランチ間でのマージ
    • 定期的にマージを行うブランチ間で、同じコンフリクトが発生する場合に有効。

まとめ

  • Gitには今回紹介した以外にも多くの便利な機能が存在します。これらの機能を活用することで、開発効率を向上させることができるはず!
  • 自分も git rerere は知らなかったので、活用できるタイミングがあれば活用します!
SODA Engineering Blog
SODA Engineering Blog

Discussion