go-git pull ведёт себя непредсказуемо

задача - пульнуть все изменения во всех ветках одного репозитория. в репозитории 2 ветки, обе стоят на одном коммите: master и branch1. в remote обе есть. с другого клона этого репозитория делаю push трёх коммитов в ветку master. проверяю что в удалённом репозитории branch1 не изменила своего положения, а master опережает её на 3 коммита. получаю из репозитория все references, прохожусь по всем, делаю чекаут и pull --force и в результате и master и branch1 указывают на коммит соответствующий origin/master, а origin/branch1 осталась там же. в чем может быть проблема и как мне добиться чтобы при pull локальная ветка встала на коммит remote?

func (r *Repository) Pull() error {
    worktree, err := r.repo.Worktree()
    if err != nil {
        return err
    }
    branchesIter, err := r.repo.References()
    if err != nil {
        return err
    }
    defer branchesIter.Close()
    if err := branchesIter.ForEach(func(ref *plumbing.Reference) error {
if err := worktree.Checkout(&git.CheckoutOptions{
        Branch: plumbing.ReferenceName(fmt.Sprintf("refs/heads/%s", strings.TrimPrefix(ref.Name().Short(), "origin/"))),
        Force: true,
Create: true,
    }); err != nil {
worktree.Checkout(&git.CheckoutOptions{
        Branch: plumbing.ReferenceName(fmt.Sprintf("refs/heads/%s", strings.TrimPrefix(ref.Name().Short(), "origin/"))),
        Force: true,
    })//как то так. код на работе остался, по памяти восстановил
}
        if err := worktree.Pull(&git.PullOptions{Force: true, ReferenceName: ref.Target(), SingleBranch: true}); err != nil && err != git.NoErrAlreadyUpToDate {
            return err
        }
        return nil
    }); err != nil {
        return err
    }

    return nil
}

Ответы (0 шт):