{"record":{"id":"1d3dd09f40e7721a","repo":"Jguer/yay","slug":"error-resetting-s-s","errorCode":null,"errorMessage":"error resetting %s: %s","messagePattern":"error resetting (.+?): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/sync/workdir/merge.go","lineNumber":17,"sourceCode":"package workdir\n\nimport (\n\t\"context\"\n\t\"errors\"\n\n\t\"github.com/leonelquinteros/gotext\"\n\n\t\"github.com/Jguer/yay/v13/pkg/settings/exe\"\n)\n\nfunc gitMerge(ctx context.Context, cmdBuilder exe.ICmdBuilder, dir string) error {\n\t_, stderr, err := cmdBuilder.Capture(\n\t\tcmdBuilder.BuildGitCmd(ctx,\n\t\t\tdir, \"reset\", \"--hard\", \"HEAD\"))\n\tif err != nil {\n\t\treturn errors.New(gotext.Get(\"error resetting %s: %s\", dir, stderr))\n\t}\n\n\t_, stderr, err = cmdBuilder.Capture(\n\t\tcmdBuilder.BuildGitCmd(ctx,\n\t\t\tdir, \"merge\", \"--no-edit\", \"--ff\"))\n\tif err != nil {\n\t\treturn errors.New(gotext.Get(\"error merging %s: %s\", dir, stderr))\n\t}\n\n\treturn nil\n}\n\nfunc mergePkgbuilds(ctx context.Context, cmdBuilder exe.ICmdBuilder, pkgbuildDirs map[string]string) error {\n\tfor _, dir := range pkgbuildDirs {\n\t\terr := gitMerge(ctx, cmdBuilder, dir)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}","sourceCodeStart":1,"sourceCodeEnd":35,"githubUrl":"https://github.com/Jguer/yay/blob/328f4b4939fb35f38c2f7c7ce3b8638a839bafa5/pkg/sync/workdir/merge.go#L1-L35","documentation":"gitMerge resets the pkgbuild clone's worktree with 'git reset --hard HEAD' before fast-forward merging upstream; if that reset command fails it returns 'error resetting <dir>: <stderr>'. It means the local repo state is broken such that git could not reset (or the git binary/paths are wrong).","triggerScenarios":"mergePkgbuilds -> gitMerge when cmdBuilder.Capture on 'git -C <dir> reset --hard HEAD' returns a non-zero exit; stderr from git is embedded in the message.","commonSituations":"Corrupted .git in ~/.cache/yay/pkgbuilds/<repo> after a killed update; interrupted merge leaving unresolvable index state; disk-full during a previous update; git ownership/safe.directory issues on shared caches.","solutions":["Delete the affected pkgbuilds clone and let yay re-clone it: rm -rf ~/.cache/yay/pkgbuilds (or the specific repo dir) then re-run the update.","Read the embedded stderr: fix 'dubious ownership' with git config --global --add safe.directory <dir>, or repair the index with rm <dir>/.git/index && git -C <dir> reset --hard HEAD.","Check free disk space and filesystem health if the reset failed with I/O errors.","Ensure git is installed and on PATH for the user running yay."],"exampleFix":"// before\n$ yay\nerror resetting /home/u/.cache/yay/pkgbuilds/archlinux: fatal: unsafe repository\n// after\n$ git config --global --add safe.directory /home/u/.cache/yay/pkgbuilds/archlinux\n# or re-clone: rm -rf ~/.cache/yay/pkgbuilds && yay","handlingStrategy":"fallback","validationCode":"// detect a broken clone before merging\nif _, err := os.Stat(filepath.Join(dir, \".git\")); err != nil {\n    os.RemoveAll(dir) // force fresh clone\n}\nout, err := exec.Command(\"git\", \"-C\", dir, \"status\", \"--porcelain\").CombinedOutput()\nif err != nil {\n    os.RemoveAll(dir) // repo unusable; re-clone instead of resetting\n}","typeGuard":null,"tryCatchPattern":"if err := workdir.MergePkgbuilds(ctx, cmdBuilder, repos); err != nil {\n    if strings.Contains(err.Error(), \"error resetting\") {\n        os.RemoveAll(pkgbuildsDir)\n        return mergePkgbuilds(ctx, cmdBuilder, repos) // fresh clone\n    }\n    return err\n}","preventionTips":["Re-clone pkgbuilds instead of repairing when git state is corrupt.","Avoid killing yay mid git operation.","Check safe.directory config when cache is shared across users.","Monitor disk space before large syncs."],"tags":["git","vcs","arch-linux","aur"],"backgroundTag":"git-command-failed","analyzedSha":"328f4b4939fb35f38c2f7c7ce3b8638a839bafa5","analyzedAt":"2026-09-07T16:45:12.608Z","contentChangedAt":"2026-09-07T16:45:12.608Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}