diff --git a/remote.go b/remote.go
index 80604092a..f4a14718b 100644
--- a/remote.go
+++ b/remote.go
@@ -623,7 +623,11 @@ func getHaves(
 		}
 
 		err = getHavesFromRef(ref, remoteRefs, s, haves)
-		if err != nil {
+
+		// Take care of the edge case where iterating using Preorder over
+		// commits produces an `object not found` error, if using a shallow
+		// clone with incomplete history.
+		if err != nil && err != plumbing.ErrObjectNotFound {
 			return nil, err
 		}
 	}
diff --git a/remote_test.go b/remote_test.go
index 58a05983f..86d2c7030 100644
--- a/remote_test.go
+++ b/remote_test.go
@@ -3,6 +3,7 @@ package git
 import (
 	"bytes"
 	"context"
+	"fmt"
 	"io"
 	"io/ioutil"
 	"os"
@@ -55,6 +56,37 @@ func (s *RemoteSuite) TestFetchInvalidFetchOptions(c *C) {
 	c.Assert(err, Equals, config.ErrRefSpecMalformedSeparator)
 }
 
+func (s *RemoteSuite) TestFetchUnrelated(c *C) {
+	fmt.Println(fixtures.RootFolder)
+	mem := memory.NewStorage()
+	r1 := newRemote(mem, &config.RemoteConfig{
+		URLs: []string{s.GetBasicLocalRepositoryURL()},
+	})
+	r2 := newRemote(mem, &config.RemoteConfig{
+		URLs: []string{s.GetLocalRepositoryURL(fixtures.ByTag("tags").One())},
+	})
+
+	// Fetch both repos into the same storage but under different remote names.
+	s.testFetch(c, r1, &FetchOptions{
+		RefSpecs: []config.RefSpec{
+			config.RefSpec("+refs/heads/master:refs/remotes/r1/master"),
+		},
+		Depth: 1,
+	}, []*plumbing.Reference{
+		plumbing.NewReferenceFromStrings("refs/remotes/r1/master", "6ecf0ef2c2dffb796033e5a02219af86ec6584e5"),
+	})
+	s.testFetch(c, r2, &FetchOptions{
+		RefSpecs: []config.RefSpec{
+			config.RefSpec("+refs/heads/master:refs/remotes/r2/master"),
+		},
+		Depth: 1,
+	}, []*plumbing.Reference{
+		plumbing.NewReferenceFromStrings("refs/remotes/r1/master", "6ecf0ef2c2dffb796033e5a02219af86ec6584e5"),
+		plumbing.NewReferenceFromStrings("refs/remotes/r2/master", "f7b877701fbf855b44c0a9e86f3fdce2c298b07f"),
+	})
+
+}
+
 func (s *RemoteSuite) TestFetchWildcard(c *C) {
 	r := newRemote(memory.NewStorage(), &config.RemoteConfig{
 		URLs: []string{s.GetBasicLocalRepositoryURL()},