mirror of
https://github.com/git/git.git
synced 2024-11-06 17:23:00 +01:00
e0ec18192d
Displaying the SHA1 of 'their' branch (the branch being merged into the current branch) is not nearly as friendly as just displaying the name of that branch, especially if that branch is already local to this repository. git-merge now sets the environment variable 'GITHEAD_%(sha1)=%(name)' for each argument it gets passed, making the actual input name that resolved to the commit '%(sha1)' easily available to the invoked merge strategy. git-merge-recursive makes use of these environment variables when they are available by using '%(name)' whenever it outputs the commit identification rather than '%(sha1)'. This is most obvious in the conflict hunks created by xdl_merge: $ git mege sideb~1 <<<<<<< HEAD:INSTALL Good! ======= Oops. >>>>>>> sideb~1:INSTALL [jc: adjusted a test script and a minor constness glitch.] Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
80 lines
1.8 KiB
Bash
80 lines
1.8 KiB
Bash
#!/bin/sh
|
|
|
|
test_description='Test merge without common ancestors'
|
|
. ./test-lib.sh
|
|
|
|
# This scenario is based on a real-world repository of Shawn Pearce.
|
|
|
|
# 1 - A - D - F
|
|
# \ X /
|
|
# B X
|
|
# X \
|
|
# 2 - C - E - G
|
|
|
|
export GIT_COMMITTER_DATE="2006-12-12 23:28:00 +0100"
|
|
echo 1 > a1
|
|
git add a1
|
|
GIT_AUTHOR_DATE="2006-12-12 23:00:00" git commit -m 1 a1
|
|
|
|
git checkout -b A master
|
|
echo A > a1
|
|
GIT_AUTHOR_DATE="2006-12-12 23:00:01" git commit -m A a1
|
|
|
|
git checkout -b B master
|
|
echo B > a1
|
|
GIT_AUTHOR_DATE="2006-12-12 23:00:02" git commit -m B a1
|
|
|
|
git checkout -b D A
|
|
git-rev-parse B > .git/MERGE_HEAD
|
|
echo D > a1
|
|
git update-index a1
|
|
GIT_AUTHOR_DATE="2006-12-12 23:00:03" git commit -m D
|
|
|
|
git symbolic-ref HEAD refs/heads/other
|
|
echo 2 > a1
|
|
GIT_AUTHOR_DATE="2006-12-12 23:00:04" git commit -m 2 a1
|
|
|
|
git checkout -b C
|
|
echo C > a1
|
|
GIT_AUTHOR_DATE="2006-12-12 23:00:05" git commit -m C a1
|
|
|
|
git checkout -b E C
|
|
git-rev-parse B > .git/MERGE_HEAD
|
|
echo E > a1
|
|
git update-index a1
|
|
GIT_AUTHOR_DATE="2006-12-12 23:00:06" git commit -m E
|
|
|
|
git checkout -b G E
|
|
git-rev-parse A > .git/MERGE_HEAD
|
|
echo G > a1
|
|
git update-index a1
|
|
GIT_AUTHOR_DATE="2006-12-12 23:00:07" git commit -m G
|
|
|
|
git checkout -b F D
|
|
git-rev-parse C > .git/MERGE_HEAD
|
|
echo F > a1
|
|
git update-index a1
|
|
GIT_AUTHOR_DATE="2006-12-12 23:00:08" git commit -m F
|
|
|
|
test_expect_failure "combined merge conflicts" "git merge -m final G"
|
|
|
|
cat > expect << EOF
|
|
<<<<<<< HEAD:a1
|
|
F
|
|
=======
|
|
G
|
|
>>>>>>> G:a1
|
|
EOF
|
|
|
|
test_expect_success "result contains a conflict" "diff -u expect a1"
|
|
|
|
git ls-files --stage > out
|
|
cat > expect << EOF
|
|
100644 da056ce14a2241509897fa68bb2b3b6e6194ef9e 1 a1
|
|
100644 cf84443e49e1b366fac938711ddf4be2d4d1d9e9 2 a1
|
|
100644 fd7923529855d0b274795ae3349c5e0438333979 3 a1
|
|
EOF
|
|
|
|
test_expect_success "virtual trees were processed" "diff -u expect out"
|
|
|
|
test_done
|