## 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.
21 lines
564 B
Markdown
21 lines
564 B
Markdown
# codex-git-tooling
|
|
|
|
Helpers for interacting with git.
|
|
|
|
```rust,no_run
|
|
use std::path::Path;
|
|
|
|
use codex_git_tooling::{create_ghost_commit, restore_ghost_commit, CreateGhostCommitOptions};
|
|
|
|
let repo = Path::new("/path/to/repo");
|
|
|
|
// Capture the current working tree as an unreferenced commit.
|
|
let ghost = create_ghost_commit(&CreateGhostCommitOptions::new(repo))?;
|
|
|
|
// Later, undo back to that state.
|
|
restore_ghost_commit(repo, &ghost)?;
|
|
```
|
|
|
|
Pass a custom message with `.message("…")` or force-include ignored files with
|
|
`.force_include(["ignored.log".into()])`.
|