Merge branch 'jk/pull-into-dirty-unborn'

"git pull" into nothing trashed "local changes" that were in the
index, and this avoids it.

* jk/pull-into-dirty-unborn:
  pull: merge into unborn by fast-forwarding from empty tree
  pull: update unborn branch tip after index
This commit is contained in:
Junio C Hamano 2013-06-27 14:29:52 -07:00
Родитель dc2ed04c23 b4dc085a8d
Коммит 833cd7fc9f
2 изменённых файлов: 38 добавлений и 2 удалений

Просмотреть файл

@ -266,10 +266,17 @@ case "$merge_head" in
;;
esac
# Pulling into unborn branch: a shorthand for branching off
# FETCH_HEAD, for lazy typers.
if test -z "$orig_head"
then
git update-ref -m "initial pull" HEAD $merge_head "$curr_head" &&
git read-tree -m -u HEAD || exit 1
# Two-way merge: we claim the index is based on an empty tree,
# and try to fast-forward to HEAD. This ensures we will not
# lose index/worktree changes that the user already made on
# the unborn branch.
empty_tree=4b825dc642cb6eb9a060e54bf8d69288fbee4904
git read-tree -m -u $empty_tree $merge_head &&
git update-ref -m "initial pull" HEAD $merge_head "$curr_head"
exit
fi

Просмотреть файл

@ -57,6 +57,35 @@ test_expect_success 'pulling into void does not overwrite untracked files' '
)
'
test_expect_success 'pulling into void does not overwrite staged files' '
git init cloned-staged-colliding &&
(
cd cloned-staged-colliding &&
echo "alternate content" >file &&
git add file &&
test_must_fail git pull .. master &&
echo "alternate content" >expect &&
test_cmp expect file &&
git cat-file blob :file >file.index &&
test_cmp expect file.index
)
'
test_expect_success 'pulling into void does not remove new staged files' '
git init cloned-staged-new &&
(
cd cloned-staged-new &&
echo "new tracked file" >newfile &&
git add newfile &&
git pull .. master &&
echo "new tracked file" >expect &&
test_cmp expect newfile &&
git cat-file blob :newfile >newfile.index &&
test_cmp expect newfile.index
)
'
test_expect_success 'test . as a remote' '
git branch copy master &&