diff --git a/builtin-merge.c b/builtin-merge.c
index dffe4b8..71bd13b 100644
--- a/builtin-merge.c
+++ b/builtin-merge.c
@@ -565,8 +565,6 @@ static int checkout_fast_forward(unsigned char *head, unsigned char *remote)
struct dir_struct dir;
struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
- if (read_cache_unmerged())
- die("you need to resolve your current index first");
refresh_cache(REFRESH_QUIET);
fd = hold_locked_index(lock_file, 1);@@ -746,6 +744,7 @@ static int evaluate_result(void)
int cnt = 0;
struct rev_info rev;
+ discard_cache();
if (read_cache() < 0)
die("failed to read the cache");
@@ -779,7 +778,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
struct commit_list **remotes = &remoteheads;
setup_work_tree();
- if (unmerged_cache())
+ if (read_cache_unmerged())
die("You are in the middle of a conflicted merge.");
/*@@ -1076,6 +1075,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
}
/* Automerge succeeded. */
+ discard_cache();
write_tree_trivial(result_tree);
automerge_was_ok = 1;
break;
diff --git a/t/t7608-merge-dirty.sh b/t/t7608-merge-dirty.sh
new file mode 100755
index 0000000..fb567f6
--- /dev/null
+++ b/t/t7608-merge-dirty.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+test_description='git-merge
+
+Merge should fail if the index has unresolved entries.'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+ echo a > a &&
+ git add a &&
+ git commit -m a &&
+ git tag a &&
+ git checkout -b branch1
+ echo b > a &&
+ git add a &&
+ git commit -m b &&
+ git tag b
+ git checkout -b branch2 HEAD~1
+ echo c > a &&
+ git add a &&
+ git commit -m c &&
+ git tag c
+'
+
+test_expect_success 'in-index merge' '
+ git checkout branch1 &&
+ test_must_fail git merge branch2 &&
+ test_must_fail git merge branch2 2> out &&
+ grep "You are in the middle of a conflicted merge" out
+'
+
+test_done
--
1.6.0.rc3.17.gc14c8.dirty