diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt index 939ec4652bea90888006adf7fd6860e43c5439ed..445f6b854404c33b970004b791721be2986cf4bf 100644 --- a/Documentation/git-fast-import.txt +++ b/Documentation/git-fast-import.txt @@ -349,17 +349,16 @@ their syntax. `from` ^^^^^^ -Only valid for the first commit made on this branch by this -fast-import process. The `from` command is used to specify the commit -to initialize this branch from. This revision will be the first -ancestor of the new commit. - -Omitting the `from` command in the first commit of a new branch will -cause fast-import to create that commit with no ancestor. This tends to be -desired only for the initial commit of a project. Omitting the -`from` command on existing branches is required, as the current -commit on that branch is automatically assumed to be the first -ancestor of the new commit. +The `from` command is used to specify the commit to initialize +this branch from. This revision will be the first ancestor of the +new commit. + +Omitting the `from` command in the first commit of a new branch +will cause fast-import to create that commit with no ancestor. This +tends to be desired only for the initial commit of a project. +Omitting the `from` command on existing branches is usually desired, +as the current commit on that branch is automatically assumed to +be the first ancestor of the new commit. As `LF` is not valid in a Git refname or SHA-1 expression, no quoting or escaping syntax is supported within ``. diff --git a/fast-import.c b/fast-import.c index f9cfc726371c34a175eecb6cbc218dcb300164b7..fd3b11757498d504b3954f70c602603d65277440 100644 --- a/fast-import.c +++ b/fast-import.c @@ -1667,8 +1667,10 @@ static void cmd_from(struct branch *b) if (strncmp("from ", command_buf.buf, 5)) return; - if (b->last_commit) - die("Can't reinitailize branch %s", b->name); + if (b->branch_tree.tree) { + release_tree_content_recursive(b->branch_tree.tree); + b->branch_tree.tree = NULL; + } from = strchr(command_buf.buf, ' ') + 1; s = lookup_branch(from); @@ -1936,7 +1938,9 @@ static void cmd_reset_branch(void) sp = strchr(command_buf.buf, ' ') + 1; b = lookup_branch(sp); if (b) { - b->last_commit = 0; + hashclr(b->sha1); + hashclr(b->branch_tree.versions[0].sha1); + hashclr(b->branch_tree.versions[1].sha1); if (b->branch_tree.tree) { release_tree_content_recursive(b->branch_tree.tree); b->branch_tree.tree = NULL; diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index 8d28211294af7e2c7e6de501d4f54f124b869fc2..970d683650f5ee6b99a07ff10063710292b28ed1 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -433,4 +433,64 @@ test_expect_success \ 'sed -e s/pack-.*pack/pack-.pack/ edges.list >actual && diff -u expect actual' +### +### series J +### + +cat >input < $GIT_COMMITTER_DATE +data < $GIT_COMMITTER_DATE +data <input < $GIT_COMMITTER_DATE +data < $GIT_COMMITTER_DATE +data <