git-sync-guard
Installation
SKILL.md
Git Sync Guard
目的
ローカル参照が古い状態で作業を開始しないようにし、non-fast-forward や不要な差分再生成を防ぐ。
適用トリガー
- 「最新を取ってから作業したい」
- 「non-fast-forward を避けたい」
- 「bare リポジトリを使っている」
- worktree 作成前 / ブランチ作成前 / 既存ブランチでの再開前
実行フロー
以下を順番に実行する。
Progress:
- [ ] 1. リポジトリ種別を判定
- [ ] 2. リモート最新を取得(fetch --prune)
- [ ] 3. 必要に応じてローカル参照を同期
- [ ] 4. ブランチ作成/checkout または worktree 作成へ進む
1) リポジトリ種別を判定
git rev-parse --is-bare-repository
trueの場合: bare 用手順を使うfalseの場合: 通常リポジトリ用手順を使う
2) リモート最新を取得(共通)
通常リポジトリ
git fetch --prune origin
bare リポジトリ
git --git-dir --prune origin < bare-repo-path > fetch
3) ローカル参照を同期(必要時)
既存ブランチを再利用する場合は、ローカル参照を origin/<branch> に合わせる。
通常リポジトリ
git checkout <branch>
git reset --hard origin/<branch>
bare リポジトリ
git --git-dir <bare-repo-path> update-ref refs/heads/<branch> refs/remotes/origin/<branch>
使い分けルール
- ローカル変更を残したい場合:
reset --hardは使わず、stashまたは別ブランチ退避を優先 - 既存ブランチが bare 側に存在する場合:
worktree addで-bを付けない - 新規ブランチ作成時: 同期済みの
origin/mainなど最新ベースから分岐する
既存ブランチ利用の例(bare)
git --git-dir <bare-repo-path> fetch --prune origin
git --git-dir <bare-repo-path> update-ref refs/heads/<branch> refs/remotes/origin/<branch>
git --git-dir <bare-repo-path> worktree add --track <workspace-root>/<branch-with-slash-replaced> origin/<branch>
注意点
fetch --pruneを省略しない- 作業開始前に
origin/<branch>が最新かを前提にする - 履歴が噛み合わない状態のままコミット作業を進めない
Related skills