update
This commit is contained in:
parent
30ca7805d6
commit
6bbbe6fa5d
1 changed files with 19 additions and 14 deletions
|
@ -111,23 +111,28 @@ be parsed from git fsck output, but for eg blobs, the commits need to
|
|||
be walked to walk the trees, to find trees that refer to the blobs.
|
||||
|
||||
For each branch that is affected, look in the reflog and/or `git log
|
||||
$branch` to find the last good change that predates all broken commits. (If
|
||||
$branch` to find the last good commit that predates all broken commits. (If
|
||||
the head commit of a branch is broken, git log is not going to show
|
||||
anything useful, but the reflog can be used to find past refs for the
|
||||
branch -- have to first delete the .git/HEAD file if it points to the
|
||||
broken ref.)
|
||||
|
||||
Reset the branch to the last good change. For the head branch, this will
|
||||
leave git showing any changes made since then as staged in the index and
|
||||
uncommitted. Or if the index is missing/corrupt, any files in the tree will
|
||||
show as modified and uncommitted. User (or git-annex assistant) can then
|
||||
commit as appropriate.
|
||||
The basic idea then is to reset the branch to the last good commit
|
||||
that was found for it. (Or if no good commit was found, reset the branch to
|
||||
a synthetic commit of an empty tree.) The details of how to do that
|
||||
depends on the branch:
|
||||
|
||||
(Special handling for git-annex branch: Commit .git/annex/index over
|
||||
top of the reset git-annex branch, and then run a `git annex fsck --fast`
|
||||
to fix up any object location info.)
|
||||
|
||||
Also should check all remote tracking branches. If such a branch refers
|
||||
to a missing object, it is sufficient to remove the tracking
|
||||
branch and then `git fetch` from the remote, which will re-download missing
|
||||
objects from it and reinstate the tracking branch.
|
||||
* For the HEAD branch, can just reset it. This will
|
||||
leave git showing any changes made since then as staged in the index and
|
||||
uncommitted. Or if the index is missing/corrupt, any files in the tree will
|
||||
show as modified and uncommitted. User (or git-annex assistant) can then
|
||||
commit as appropriate. Print appropriate warning message.
|
||||
* Special handling for git-annex branch: Reset to last good commit, and
|
||||
then commit `.git/annex/index` over top of that, and then run a
|
||||
`git annex fsck --fast` to fix up any object location info.
|
||||
* Remote tracking branches can just be removed, and then `git fetch`
|
||||
from the remote, which will re-download missing objects from it and
|
||||
reinstate the tracking branch.
|
||||
* For other branches (or tags), it's best to not rewrite them, because
|
||||
that could get really confusing. Instead, delete the old broken branch,
|
||||
and make a "recovered/$branch" that holds the last good commit.
|
||||
|
|
Loading…
Reference in a new issue