feat: git tooling for undo (#3914)

## Summary
Introduces a “ghost commit” workflow that snapshots the tree without
touching refs.
1. git commit-tree writes an unreferenced commit object from the current
index, optionally pointing to the current HEAD as its parent.
2. We then stash that commit id and use git restore --source <ghost> to
roll the worktree (and index) back to the recorded snapshot later on.

## Details
- Ghost commits live only as loose objects—we never update branches or
tags—so the repo history stays untouched while still giving us a full
tree snapshot.
- Force-included paths let us stage otherwise ignored files before
capturing the tree.
- Restoration rehydrates both tracked and force-included files while
leaving untracked/ignored files alone.
This commit is contained in:
jif-oai
2025-09-23 16:59:52 +01:00
committed by GitHub
parent 76ecbb3d8e
commit e0fbc112c7
14 changed files with 979 additions and 9 deletions

View File

@@ -0,0 +1,20 @@
[package]
name = "codex-git-tooling"
version.workspace = true
edition.workspace = true
readme = "README.md"
[lib]
name = "codex_git_tooling"
path = "src/lib.rs"
[dependencies]
tempfile = "3"
thiserror = "2"
walkdir = "2"
[lints]
workspace = true
[dev-dependencies]
pretty_assertions = "1.4.1"