diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-21 22:03:11 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-21 22:03:11 +0400 |
commit | e8b11749f031428f743c1e01a6934f6ff34cec16 (patch) | |
tree | 55e7b3bd13c97909dee616bf5ce0e50679ad2a6d | |
parent | a79944d76cf4098e42d13e5743a3dccb61ebaca6 (diff) |
Make "git checkout" know about different branches
Now "git checkout xyzzy" will check out branch "xyzzy" and
switch the HEAD to it.
-rwxr-xr-x | git-checkout-script | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/git-checkout-script b/git-checkout-script index dc1cffde0b..a3bfae79db 100755 --- a/git-checkout-script +++ b/git-checkout-script @@ -1,27 +1,35 @@ #!/bin/sh : ${GIT_DIR=.git} old=$(git-rev-parse HEAD) -new=$(git-rev-parse --revs-only "$@") -new=${new:-$old} -args=($(git-rev-parse --no-revs "$@")) - -i=0 +new= force= -update= -while [ $i -lt ${#args} ]; do - case "${args[$i]}" in +branch= +while [ "$#" != "0" ]; do + arg="$1" + shift + case "$arg" in "-f") - force=1;; - "-u") - update=1;; - "") + force=1 ;; *) - echo "unknown flag ${args[$i]}" - exit 1;; + rev=$(git-rev-parse "$arg") + if [ -z "$rev" ]; then + echo "unknown flag $arg" + exit 1 + fi + if [ "$new" ]; then + echo "Multiple revisions?" + exit 1 + fi + new="$rev" + if [ -f "$GIT_DIR/revs/heads/$arg" ]; then + branch="$arg" + fi + ;; esac i=$(($i+1)) done +: ${new=$old} if [ "$force" ] then @@ -29,5 +37,4 @@ then git-checkout-cache -q -f -u -a else git-read-tree -m -u $old $new -fi && [ "$update" ] && echo $new > "$GIT_DIR/HEAD" - +fi && [ "$branch" ] && ln -sf "refs/heads/$branch" "$GIT_DIR/HEAD" |