c85c79279d
When the upstream branch is tracked, we can detect if that branch was rebased since it was last fetched. Teach git to use that information to rebase from the old remote head onto the new remote head. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
96 lines
2.0 KiB
Bash
Executable File
96 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='pulling into void'
|
|
|
|
. ./test-lib.sh
|
|
|
|
D=`pwd`
|
|
|
|
test_expect_success setup '
|
|
|
|
echo file >file &&
|
|
git add file &&
|
|
git commit -a -m original
|
|
|
|
'
|
|
|
|
test_expect_success 'pulling into void' '
|
|
mkdir cloned &&
|
|
cd cloned &&
|
|
git init &&
|
|
git pull ..
|
|
'
|
|
|
|
cd "$D"
|
|
|
|
test_expect_success 'checking the results' '
|
|
test -f file &&
|
|
test -f cloned/file &&
|
|
diff file cloned/file
|
|
'
|
|
|
|
test_expect_success 'test . as a remote' '
|
|
|
|
git branch copy master &&
|
|
git config branch.copy.remote . &&
|
|
git config branch.copy.merge refs/heads/master &&
|
|
echo updated >file &&
|
|
git commit -a -m updated &&
|
|
git checkout copy &&
|
|
test `cat file` = file &&
|
|
git pull &&
|
|
test `cat file` = updated
|
|
'
|
|
|
|
test_expect_success 'the default remote . should not break explicit pull' '
|
|
git checkout -b second master^ &&
|
|
echo modified >file &&
|
|
git commit -a -m modified &&
|
|
git checkout copy &&
|
|
git reset --hard HEAD^ &&
|
|
test `cat file` = file &&
|
|
git pull . second &&
|
|
test `cat file` = modified
|
|
'
|
|
|
|
test_expect_success '--rebase' '
|
|
git branch to-rebase &&
|
|
echo modified again > file &&
|
|
git commit -m file file &&
|
|
git checkout to-rebase &&
|
|
echo new > file2 &&
|
|
git add file2 &&
|
|
git commit -m "new file" &&
|
|
git tag before-rebase &&
|
|
git pull --rebase . copy &&
|
|
test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
|
|
test new = $(git show HEAD:file2)
|
|
'
|
|
|
|
test_expect_success 'branch.to-rebase.rebase' '
|
|
git reset --hard before-rebase &&
|
|
git config branch.to-rebase.rebase 1 &&
|
|
git pull . copy &&
|
|
git config branch.to-rebase.rebase 0 &&
|
|
test $(git rev-parse HEAD^) = $(git rev-parse copy) &&
|
|
test new = $(git show HEAD:file2)
|
|
'
|
|
|
|
test_expect_success '--rebase with rebased upstream' '
|
|
|
|
git remote add -f me . &&
|
|
git checkout copy &&
|
|
git reset --hard HEAD^ &&
|
|
echo conflicting modification > file &&
|
|
git commit -m conflict file &&
|
|
git checkout to-rebase &&
|
|
echo file > file2 &&
|
|
git commit -m to-rebase file2 &&
|
|
git pull --rebase me copy &&
|
|
test "conflicting modification" = "$(cat file)" &&
|
|
test file = $(cat file2)
|
|
|
|
'
|
|
|
|
test_done
|