diff --git a/.gitignore b/.gitignore index 1a9090bffc095abef71bf7a4121d69bfa4372174..5382e742719be2ca7285898d70d9bf0fd367c247 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ git-diff-files git-diff-index git-diff-stages git-diff-tree +git-describe git-fetch git-fetch-pack git-findtags diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt index e0ff74f648fa57bc1a6d100f886fca424051ce8a..e35984dfc7d5a5287ea8231b25c5c8256fb89011 100644 --- a/Documentation/git-commit.txt +++ b/Documentation/git-commit.txt @@ -25,7 +25,9 @@ information. OPTIONS ------- -a|--all:: - Update all paths in the index file. + Update all paths in the index file. This flag notices + files that have been modified and deleted, but new files + you have not told about git are not affected. -c or -C :: Take existing commit object, and reuse the log message diff --git a/Documentation/git-reset.txt b/Documentation/git-reset.txt index c6a269b7ef56d830ad493467a63637b2afee9e83..315683a6d575bb158ec621d7677ff60bcdbce3eb 100644 --- a/Documentation/git-reset.txt +++ b/Documentation/git-reset.txt @@ -145,6 +145,32 @@ brings your index file and the working tree back to that state, and resets the tip of the branch to that commit. ------------ +Interrupted workflow:: ++ +You can get interrupted by an ungent fix request while you are +still in the middle of a large change. The files in your +working tree are not in any shape to be committed yet, but you +need to get to the other branch for a quick bugfix. ++ +------------ +$ git checkout feature ;# you were working in "feature" branch and +$ work work work ;# got interrupted +$ git commit -a -m 'snapshot WIP' <1> +$ git checkout master +$ fix fix fix +$ git commit ;# commit with real log +$ git checkout feature +$ git reset --soft HEAD^ ;# go back to WIP state <2> +$ git reset <3> + +<1> This commit will get blown away so a throw-away log message is OK. +<2> This removes the 'WIP' commit from the commit history, and makes + your working tree in the state just before you made that snapshot. +<3> After <2>, the index file still has all the WIP changes you + committed in <1>. This sets it to the last commit you were + basing the WIP changes on. +------------ + Author ------ Written by Junio C Hamano and Linus Torvalds @@ -156,4 +182,3 @@ Documentation by Junio C Hamano and the git-list . GIT --- Part of the gitlink:git[7] suite - diff --git a/Documentation/pull-fetch-param.txt b/Documentation/pull-fetch-param.txt index b5b979242ca809d121ef10826ab083159ea2195c..4524fee6f2d18cc37efb110a3400d5130b95b742 100644 --- a/Documentation/pull-fetch-param.txt +++ b/Documentation/pull-fetch-param.txt @@ -134,9 +134,9 @@ is often useful. + Some short-cut notations are also supported. + -* For backward compatibility, `tag` is almost ignored; - it just makes the following parameter to mean a - refspec `refs/tags/:refs/tags/`. +* `tag ` means the same as `refs/tags/:refs/tags/`; + used with pull or fetch, it requests fetching everything up to + the given tag. * A parameter without a colon is equivalent to : when pulling/fetching, and `:` when pushing. That is, do not store it locally if diff --git a/describe.c b/describe.c index 1e764026b1554e03eacb0915efbf9b475a6e9c84..fabadb827fb5d7852028e5d8e437e315215f90b1 100644 --- a/describe.c +++ b/describe.c @@ -132,10 +132,11 @@ static void describe(char *arg) if (n) { printf("%s-g%s\n", n->path, find_unique_abbrev(cmit->object.sha1, abbrev)); - break; + clear_commit_marks(cmit, SEEN); + return; } } - clear_commit_marks(cmit, SEEN); + die("cannot describe '%s'", sha1_to_hex(cmit->object.sha1)); } int main(int argc, char **argv) diff --git a/name-rev.c b/name-rev.c index 65333d4166da845d8594d2dc397c0026eebe2421..bbadb91aa0f51fe1ef7135866912d806c70fc457 100644 --- a/name-rev.c +++ b/name-rev.c @@ -93,10 +93,11 @@ static int name_ref(const char *path, const unsigned char *sha1) } if (o && o->type == commit_type) { struct commit *commit = (struct commit *)o; - const char *p; - while ((p = strchr(path, '/'))) - path = p+1; + if (!strncmp(path, "refs/heads/", 11)) + path = path + 11; + else if (!strncmp(path, "refs/", 5)) + path = path + 5; name_rev(commit, strdup(path), 0, 0, deref); } diff --git a/show-branch.c b/show-branch.c index f43c4064699fb86e31dba2737d232e70330944d0..f1bce499baeb780fbea77e84b6bc14633c178180 100644 --- a/show-branch.c +++ b/show-branch.c @@ -496,7 +496,7 @@ static void append_one_rev(const char *av) append_ref(av, revkey); return; } - if (strchr(av, '*') || strchr(av, '?')) { + if (strchr(av, '*') || strchr(av, '?') || strchr(av, '[')) { /* glob style match */ int saved_matches = ref_name_cnt; match_ref_pattern = av; diff --git a/t/t6010-merge-base.sh b/t/t6010-merge-base.sh index c3a9680e2efe632f6e7cc46c828a393eef959d44..1dce123aecd0baa4bbcf122b9a91c478d6e2ef53 100755 --- a/t/t6010-merge-base.sh +++ b/t/t6010-merge-base.sh @@ -46,14 +46,14 @@ H=$(doit 8 H $A $F) test_expect_success 'compute merge-base (single)' \ 'MB=$(git-merge-base G H) && - expr "$(git-name-rev "$MB")" : "[0-9a-f]* B"' + expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"' test_expect_success 'compute merge-base (all)' \ 'MB=$(git-merge-base --all G H) && - expr "$(git-name-rev "$MB")" : "[0-9a-f]* B"' + expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"' test_expect_success 'compute merge-base with show-branch' \ 'MB=$(git-show-branch --merge-base G H) && - expr "$(git-name-rev "$MB")" : "[0-9a-f]* B"' + expr "$(git-name-rev "$MB")" : "[0-9a-f]* tags/B"' test_done diff --git a/update-index.c b/update-index.c index be87b99808355b8ada23df4a04edf5078d87d06f..a84a04f91855f1953f33cfa7573b7656e7c116b9 100644 --- a/update-index.c +++ b/update-index.c @@ -534,10 +534,17 @@ int main(int argc, const char **argv) struct strbuf buf; strbuf_init(&buf); while (1) { + char *path_name; read_line(&buf, stdin, line_termination); if (buf.eof) break; - update_one(buf.buf, prefix, prefix_length); + if (line_termination && buf.buf[0] == '"') + path_name = unquote_c_style(buf.buf, NULL); + else + path_name = buf.buf; + update_one(path_name, prefix, prefix_length); + if (path_name != buf.buf) + free(path_name); } } if (active_cache_changed) {