First pass at more detailed conflict information
diff --git a/glide.lock b/glide.lock
index 2221b61..ee278ef 100644
--- a/glide.lock
+++ b/glide.lock
@@ -1,12 +1,12 @@
-hash: 20903781daabd592231b6616959bc03a5c9d6cbda87a0a566463d3ba1fcaf02b
-updated: 2016-03-22T12:48:16.057789318-04:00
+hash: 83c7c3c86a8d50d46ac2731938195e348f2445e6106325a4f90976563c946bd8
+updated: 2016-03-23T15:34:32.512791672-04:00
 imports:
 - name: github.com/codegangsta/cli
-  version: aca5b047ed14d17224157c3434ea93bf6cdaadee
+  version: 9fec0fad02befc9209347cc6d620e68e1b45f74d
 - name: github.com/Masterminds/semver
   version: 808ed7761c233af2de3f9729a041d68c62527f3a
 - name: github.com/Masterminds/vcs
-  version: 37d65fe88a747ab1ac3af3cf5035f62b9f4bee1c
+  version: b22ee1673cdd03ef47bb0b422736a7f17ff0648c
 - name: gopkg.in/yaml.v2
   version: a83829b6f1293c91addabc89d0571c246397bbf4
 devImports: []
diff --git a/glide.yaml b/glide.yaml
index 9e95a35..a8eb79a 100644
--- a/glide.yaml
+++ b/glide.yaml
@@ -11,7 +11,7 @@
 import:
 - package: gopkg.in/yaml.v2
 - package: github.com/Masterminds/vcs
-  version: ^1.5.0
+  version: ^1.5.1
 - package: github.com/codegangsta/cli
 - package: github.com/Masterminds/semver
   version: ^1.0.0
diff --git a/repo/installer.go b/repo/installer.go
index f14b595..711fdc0 100644
--- a/repo/installer.go
+++ b/repo/installer.go
@@ -6,6 +6,7 @@
 	"path/filepath"
 	"strings"
 	"sync"
+	"time"
 
 	"github.com/Masterminds/glide/cfg"
 	"github.com/Masterminds/glide/dependency"
@@ -366,7 +367,7 @@
 	d := m.Config.Imports.Get(root)
 	// If the dependency is nil it means the Config doesn't yet know about it.
 	if d == nil {
-		d = m.Use.Get(root)
+		d, _ = m.Use.Get(root)
 		// We don't know about this dependency so we create a basic instance.
 		if d == nil {
 			d = &cfg.Dependency{Name: root}
@@ -433,7 +434,7 @@
 	d := m.Config.Imports.Get(root)
 	// If the dependency is nil it means the Config doesn't yet know about it.
 	if d == nil {
-		d = m.Use.Get(root)
+		d, _ = m.Use.Get(root)
 		// We don't know about this dependency so we create a basic instance.
 		if d == nil {
 			d = &cfg.Dependency{Name: root}
@@ -490,9 +491,9 @@
 			for _, dep := range deps {
 
 				// The fist one wins. Would something smater than this be better?
-				exists := d.Use.Get(dep.Name)
+				exists, _ := d.Use.Get(dep.Name)
 				if exists == nil && (dep.Reference != "" || dep.Repository != "") {
-					d.Use.Add(dep.Name, dep)
+					d.Use.Add(dep.Name, dep, root)
 				}
 			}
 		} else if err != nil {
@@ -519,7 +520,7 @@
 
 	v := d.Config.Imports.Get(root)
 
-	dep := d.Use.Get(root)
+	dep, req := d.Use.Get(root)
 	if dep != nil && v != nil {
 		if v.Reference == "" && dep.Reference != "" {
 			v.Reference = dep.Reference
@@ -528,7 +529,7 @@
 			dep = v
 		} else if v.Reference != "" && dep.Reference != "" && v.Reference != dep.Reference {
 			dest := filepath.Join(d.Destination, filepath.FromSlash(v.Name))
-			dep = determineDependency(v, dep, dest)
+			dep = determineDependency(v, dep, dest, req)
 		} else {
 			dep = v
 		}
@@ -560,7 +561,7 @@
 	return
 }
 
-func determineDependency(v, dep *cfg.Dependency, dest string) *cfg.Dependency {
+func determineDependency(v, dep *cfg.Dependency, dest, req string) *cfg.Dependency {
 	repo, err := v.GetRepo(dest)
 	if err != nil {
 		singleWarn("Unable to access repo for %s\n", v.Name)
@@ -573,7 +574,24 @@
 
 	// Both are references and they are different ones.
 	if vIsRef && depIsRef {
-		singleWarn("Conflict: %s ref is %s, but also asked for %s\n", v.Name, v.Reference, dep.Reference)
+		singleWarn("Conflict: %s rev is currently %s, but %s wants %s\n", v.Name, v.Reference, req, dep.Reference)
+
+		pf := msg.Default.Color(msg.Green, "[INFO] ")
+		fm := "%s reference %s:\n" +
+			pf + "- author: %s\n" +
+			pf + "- commit date: %s\n" +
+			pf + "- subject (first line): %s\n"
+
+		vci, err := repo.CommitInfo(v.Reference)
+		if err == nil {
+			singleInfo(fm, v.Name, v.Reference, vci.Author, vci.Date.Format(time.RFC1123Z), commitSubjectFirstLine(vci.Message))
+		}
+
+		depci, err := repo.CommitInfo(dep.Reference)
+		if err == nil {
+			singleInfo(fm, v.Name, dep.Reference, depci.Author, depci.Date.Format(time.RFC1123Z), commitSubjectFirstLine(depci.Message))
+		}
+
 		singleInfo("Keeping %s %s", v.Name, v.Reference)
 		return v
 	} else if vIsRef {
@@ -688,23 +706,35 @@
 
 type importCache struct {
 	cache map[string]*cfg.Dependency
+	from  map[string]string
 }
 
 func newImportCache() *importCache {
 	return &importCache{
 		cache: make(map[string]*cfg.Dependency),
+		from:  make(map[string]string),
 	}
 }
 
-func (i *importCache) Get(name string) *cfg.Dependency {
+func (i *importCache) Get(name string) (*cfg.Dependency, string) {
 	d, f := i.cache[name]
 	if f {
-		return d
+		return d, i.from[name]
 	}
 
-	return nil
+	return nil, ""
 }
 
-func (i *importCache) Add(name string, dep *cfg.Dependency) {
+func (i *importCache) Add(name string, dep *cfg.Dependency, root string) {
 	i.cache[name] = dep
+	i.from[name] = root
+}
+
+func commitSubjectFirstLine(sub string) string {
+	lines := strings.Split(sub, "\n")
+	if len(lines) <= 1 {
+		return sub
+	}
+
+	return lines[0]
 }