Git


Nov. 30, 2025

Git 履歴から機密情報を完全に削除する

What I Learned

誤ってコミットされた機密情報(APIキー、秘密鍵、設定ファイルなど)は、通常の削除では Git の履歴に残り続ける。git filter-repo を使うことで Git の履歴を書き換え、機密情報を完全に削除できる。ただし、履歴から削除しても、すでに漏洩した認証情報が安全になるわけではないため、必ず該当する認証情報は失効・再発行する必要がある。

Details

背景

以前は git filter-branch を用いた方法が紹介されていたが、現在では公式ドキュメントにおいて注意喚起が行われており、新たに手順を作成する場合には git filter-repo の採用が推奨されている。

使用するツール

  • git
  • git filter-repo

作業前の注意点

  • 本手順は履歴を書き換える破壊的操作である
  • 共有リポジトリで実施する場合は、事前に関係者へ周知する
  • 作業後は、全利用者に再クローンを依頼する

ケース別手順

ケース1:特定のファイルを履歴から完全に削除する

1. ミラークローン

1git clone --mirror REMOTE_URL REPO_NAME.git
2cd REPO_NAME.git

ミラークローンでは、すべてのブランチ・タグ・参照を含めて取得される。履歴を書き換えた結果をリモートへ正確に反映するため、本手順ではミラークローンを使用する。

2. 機密ファイルを履歴から削除

1git filter-repo \
2  --path SENSITIVE_PATH_1 \
3  --path SENSITIVE_PATH_2 \
4  --invert-paths
  • SENSITIVE_PATH_n:履歴から削除したいファイルのリポジトリ相対パス(複数指定可能)

3. リモートへ反映

Nov. 28, 2025

ローカルのみで完結する Git 運用ガイド

What I Learned

Git を初めて使う人や個人開発者向けに、GitHub などのリモートを使わずにローカルだけで Git を完結させる運用方法を整理した。Git は本来ローカルにすべての履歴を持つ仕組みなので、リモートを覚える前にローカル Git を理解した方が扱いやすく、混乱も少ない。ローカル内でもバックアップ(擬似リモート/ミラー)が可能である。

Details

ローカルだけで Git を使うメリット

  • 覚える概念が少なく学習しやすい
  • 他人に迷惑がかからない
  • Git の本質(変更履歴の管理)に集中できる

1. 基本操作とワークフロー

1-1. リポジトリ作成・状態確認

1git init
2git status

1-2. 変更を記録する流れ

1git add .
2git commit -m "作業内容"

1-3. 状態・履歴の確認

1git diff
2git log --oneline --graph --decorate

1-4. ブランチ操作

1git switch -c feature
2git switch main
3git branch -d feature

2. 過去バージョンに戻す(復旧コマンド)

2-1. ファイルだけ戻す

1git restore ファイル名

2-2. 直前のコミットを取り消す(作業内容は残す)

1git reset --soft HEAD^

2-3. コミットも変更も巻き戻す(破壊的)

1git reset --hard HEAD^

2-4. 特定のコミットに戻る

1git reset --hard <コミットID>

2-5. 履歴を壊さずに取り消す

1git revert <コミットID>

2-6. 過去の状態を参照

1git switch --detach <コミットID>

3. バックアップ(ローカル擬似リモート + ミラー)

Git の “リモート” は URL でなくてもよく、ローカルのフォルダをリモートとして登録できる。

Nov. 27, 2025

WSL2 + Ubuntu + Git による開発環境の構築

What I Learned

普段は Mac を使って開発しているが、最近 Windows ユーザーに開発を教える機会が増えた。そこで Windows での開発環境構築手順を整理した。WSL2 + Ubuntu + Git + VS Code の組み合わせで、Mac と同様の快適な Linux 開発環境が Windows 上に構築できる。仮想マシンよりも軽量で、Windows とのファイル共有もスムーズである。

Details

0. 前提条件

  • Windows 10(21H2 以降)または Windows 11
  • 管理者権限のあるユーザー
  • BIOS/UEFI で仮想化支援機能(Intel VT-x / AMD-V)が有効
  • インターネット接続

1. WSL2 のセットアップ

1-1. インストール

PowerShell(管理者)で以下を実行:

1wsl --install

再起動を求められた場合は必ず再起動する。

1-2. Ubuntu のインストール確認

再起動後 PowerShell で:

1wsl -l -v

Ubuntu が表示されない場合は手動インストール:

1wsl --install -d Ubuntu

あるいは Microsoft Store から「Ubuntu」をインストールする。

Nov. 19, 2025

GitHub の PR で特定ファイルを誤って変更してしまったときの対処法

What I Learned

Pull Request 内の特定コミットから不要なファイル変更だけを取り除く方法を学んだ。git rebase -igit commit --amend を組み合わせることで、履歴を綺麗に保ちながら、過去のコミットをピンポイントで修正できる。

Details

問題の状況

PR を作成して diff を確認したところ、あるコミットで意図しないファイルが誤って変更されていた:

D  example/config.yaml    (削除扱い)

特定の設定ファイルやドキュメントなど、関係のないものがコミットに含まれてしまうケースはよくある。このままでは PR が正しくレビューできないため、該当コミットだけを修正する必要があった。

解決方針

今回の目的は以下の通りである:

  • PR の他の変更部分には影響を与えない
  • 問題のコミット"だけ"内容を修正する
  • 履歴をきれいに保ち、不要な変更をなかったことにする
  • 「削除 → 再追加」のようなノイズを残さない

これを実現するために、git rebase -i を使って該当コミットを直接編集し、git commit --amend で内容を書き換える方法を選んだ。

実際の手順

Step 1: 対象コミットの親から rebase を開始

対象コミット ID を abcd1234 として:

1git rebase -i 'abcd1234^'

rebase 用の画面が開き、次のような行が表示される:

pick abcd1234  Some commit message

これを次のように書き換える:

edit abcd1234  Some commit message

保存すると、abcd1234 のコミットで処理が一旦停止する。

Nov. 5, 2025

Git リベース インタラクティブ

学んだこと

Git のインタラクティブリベース(git rebase -i)は、変更をプッシュする前にコミット履歴をクリーンアップするための強力なツールです。コミットの並び替え、統合、編集、削除が可能です。

詳細

インタラクティブリベースは、コミットとコマンドのリストを含むエディタを開きます:

1git rebase -i HEAD~3

利用可能なコマンド:

  • pick - コミットをそのまま使用
  • reword - コミットメッセージを変更
  • edit - 修正のために停止
  • squash - 前のコミットと結合
  • fixup - squash と同様だがコミットメッセージを破棄
  • drop - コミットを削除

ワークフローの例:

pick abc1234 Add feature X
squash def5678 Fix typo in feature X
reword ghi9012 Update documentation

これにより、関連するコミットを結合し、コミットメッセージを改善することで、よりクリーンな履歴が作成されます。

参考資料