"golang.org/x/sync/semaphore"
 
-       "github.com/gohugoio/hugo/modules"
-
        "io/ioutil"
 
        "github.com/gohugoio/hugo/common/herrors"
                doWithCommandeer,
                doWithConfig)
 
-       if err != nil {
-               if mustHaveConfigFile {
-                       return err
-               }
-               if err != hugolib.ErrNoConfigFile && !modules.IsNotExist(err) {
-                       return err
-               }
-
+       if err != nil && mustHaveConfigFile {
+               return err
        } else if mustHaveConfigFile && len(configFiles) == 0 {
                return hugolib.ErrNoConfigFile
        }
 
 ` + commonUsage,
                        RunE: func(cmd *cobra.Command, args []string) error {
                                return c.withModsClient(false, func(c *modules.Client) error {
+
                                        // We currently just pass on the flags we get to Go and
                                        // need to do the flag handling manually.
                                        if len(args) == 1 && args[0] == "-h" {
 
        }
 
        _, modulesConfigFiles, err := l.collectModules(modulesConfig, v, collectHook)
-       if err != nil {
-               return v, configFiles, err
-       }
 
-       if len(modulesConfigFiles) > 0 {
+       if err == nil && len(modulesConfigFiles) > 0 {
                configFiles = append(configFiles, modulesConfigFiles...)
        }
 
-       return v, configFiles, nil
+       return v, configFiles, err
 
 }
 
        v1.Set("modulesClient", modulesClient)
 
        moduleConfig, err := modulesClient.Collect()
-       if err != nil {
-               return nil, nil, err
-       }
 
        // Avoid recreating these later.
        v1.Set("allModules", moduleConfig.ActiveModules)
                configFilenames = append(configFilenames, moduleConfig.GoModulesFilename)
        }
 
-       return moduleConfig.ActiveModules, configFilenames, nil
+       return moduleConfig.ActiveModules, configFilenames, err
 
 }
 
 
 
 // Get runs "go get" with the supplied arguments.
 func (c *Client) Get(args ...string) error {
+       if len(args) == 0 || (len(args) == 1 && args[0] == "-u") {
+               update := len(args) != 0
+
+               // We need to be explicit about the modules to get.
+               for _, m := range c.moduleConfig.Imports {
+                       var args []string
+                       if update {
+                               args = []string{"-u"}
+                       }
+                       args = append(args, m.Path)
+                       if err := c.get(args...); err != nil {
+                               return err
+                       }
+               }
+
+               return nil
+       }
+
+       return c.get(args...)
+}
+
+func (c *Client) get(args ...string) error {
        if err := c.runGo(context.Background(), c.logger.Out, append([]string{"get"}, args...)...); err != nil {
                errors.Wrapf(err, "failed to get %q", args)
        }
                        return nil
                }
 
+               if strings.Contains(stderr.String(), "invalid version: unknown revision") {
+                       // See https://github.com/gohugoio/hugo/issues/6825
+                       c.logger.FEEDBACK.Println(`hugo: you need to manually edit go.mod to resolve the unknown revision.`)
+               }
+
                _, ok := err.(*exec.ExitError)
                if !ok {
                        return errors.Errorf("failed to execute 'go %v': %s %T", args, err, err)