safegit v0.26.0 /safegit backup
On this page

push, list, and restore per-branch history backups held in the tool-owned refs/backups namespace on a remote, so uncommitted-to-the-world work survives a lost machine without ever touching refs/heads

#safegit backup

push, list, and restore per-branch history backups held in the tool-owned refs/backups namespace on a remote, so uncommitted-to-the-world work survives a lost machine without ever touching refs/heads

#backup backup

push the current branch to its backup slot refs/backups/ on the remote, after fetching that slot and refusing when it holds commits your history does not contain; the push is pinned with --force-with-lease to the exact SHA that was just observed (or to "this ref must not exist" for a first backup), so a concurrent backup from another machine is rejected rather than clobbered; plain git equivalent: git push --force-with-lease=refs/backups/: HEAD:refs/backups/

Effect: mutating

#Flags

Flags
NameShortTypeDefaultEnvDescription
--overwrite-remote-backupboolreplace a backup slot whose commits are missing from your current history, leasing on the SHA observed during this run; without this flag such a slot is a hard error because overwriting it would drop work backed up from elsewhere
--allow-public-remoteboolconsent to backing up to a remote that is public, or whose visibility safegit cannot determine; without this flag such a target is a question, asked at the terminal and refused outright when there is none, because a backup pushes the whole branch and --approve-consequential says nothing about where

#Arguments

Arguments
NameRequiredDescription
remotenoname of the remote repository holding the backup slots (defaults to origin)

#Grants

Grants
KindNameReason
proc_mutatepusha backup slot is only useful once it is on the remote
proc_mutateforce-pusha backup slot is a single overwritten slot, pinned by a lease to the SHA observed a moment earlier

#backup list

list every backup slot present on the remote with the branch name and the commit each slot points at, so you can see which branches are backed up from which machine before restoring one; plain git equivalent: git ls-remote 'refs/backups/*'

Effect: read_only

#Arguments

Arguments
NameRequiredDescription
remotenoname of the remote repository holding the backup slots (defaults to origin)

#backup restore

fetch the current branch's backup slot from the remote and fast-forward the branch onto it, refusing when the local branch carries commits the backup does not contain so no local work is ever discarded; plain git equivalent: git fetch refs/backups/ && git merge --ff-only FETCH_HEAD

Effect: mutating

#Arguments

Arguments
NameRequiredDescription
remotenoname of the remote repository holding the backup slots (defaults to origin)
Search