Browse Source

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

"git pull" into nothing trashed "local changes" that were in the
index.

* jk/pull-into-dirty-unborn:
  pull: merge into unborn by fast-forwarding from empty tree
  pull: update unborn branch tip after index
maint
Junio C Hamano 12 years ago
parent
commit
d2db8f78c4
  1. 11
      git-pull.sh
  2. 29
      t/t5520-pull.sh

11
git-pull.sh

@ -266,10 +266,17 @@ case "$merge_head" in @@ -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


29
t/t5520-pull.sh

@ -57,6 +57,35 @@ test_expect_success 'pulling into void does not overwrite untracked files' ' @@ -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 &&

Loading…
Cancel
Save