#!/bin/sh test_description='checkout -m -- <conflicted path> Ensures that checkout -m on a resolved file restores the conflicted file' . ./test-lib.sh test_expect_success setup ' test_tick && test_commit both.txt both.txt initial && git branch topic && test_commit modified_in_master both.txt in_master && test_commit added_in_master each.txt in_master && git checkout topic && test_commit modified_in_topic both.txt in_topic && test_commit added_in_topic each.txt in_topic ' test_expect_success 'git merge master' ' test_must_fail git merge master ' clean_branchnames () { # Remove branch names after conflict lines sed 's/^\([<>]\{5,\}\) .*$/\1/' } test_expect_success '-m restores 2-way conflicted+resolved file' ' cp each.txt each.txt.conflicted && echo resolved >each.txt && git add each.txt && git checkout -m -- each.txt && clean_branchnames <each.txt >each.txt.cleaned && clean_branchnames <each.txt.conflicted >each.txt.conflicted.cleaned && test_cmp each.txt.conflicted.cleaned each.txt.cleaned ' test_expect_success '-m restores 3-way conflicted+resolved file' ' cp both.txt both.txt.conflicted && echo resolved >both.txt && git add both.txt && git checkout -m -- both.txt && clean_branchnames <both.txt >both.txt.cleaned && clean_branchnames <both.txt.conflicted >both.txt.conflicted.cleaned && test_cmp both.txt.conflicted.cleaned both.txt.cleaned ' test_expect_success 'force checkout a conflict file creates stage zero entry' ' git init co-force && ( cd co-force && echo a >a && git add a && git commit -ama && A_OBJ=$(git rev-parse :a) && git branch topic && echo b >a && git commit -amb && B_OBJ=$(git rev-parse :a) && git checkout topic && echo c >a && C_OBJ=$(git hash-object a) && git checkout -m master && test_cmp_rev :1:a $A_OBJ && test_cmp_rev :2:a $B_OBJ && test_cmp_rev :3:a $C_OBJ && git checkout -f topic && test_cmp_rev :0:a $A_OBJ ) ' test_done