Skip to content

Commit

Permalink
Make "git checkout" create new branches on demand
Browse files Browse the repository at this point in the history
In particular, if we check out something that isn't an old branch, it
now requires a new branch-name to check the thing out into.

So, for example:

	git checkout -b my-branch v2.6.12

will create the new branch "my-branch", and start it at v2.6.12, while

	git checkout master

will just switch back to the master branch.

Of course, if you want to create a new branch "my-branch" and _not_
check it out, you could have done so with just

	git-rev-parse v2.6.12^0 > .git/refs/heads/my-branch

which I think I will codify as "git branch".
  • Loading branch information
Linus Torvalds committed Jul 12, 2005
1 parent 714fff2 commit 91dcdfd
Showing 1 changed file with 23 additions and 0 deletions.
23 changes: 23 additions & 0 deletions git-checkout-script
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,19 @@ old=$(git-rev-parse HEAD)
new=
force=
branch=
newbranch=
while [ "$#" != "0" ]; do
arg="$1"
shift
case "$arg" in
"-b")
newbranch="$1"
shift
[ -z "$newbranch" ] &&
die "git checkout: -b needs a branch name"
[ -e "$GIT_DIR/refs/heads/$newbranch" ] &&
die "git checkout: branch $newbranch already exists"
;;
"-f")
force=1
;;
Expand All @@ -32,6 +41,16 @@ while [ "$#" != "0" ]; do
done
[ -z "$new" ] && new=$old

#
# If we don't have an old branch that we're switching to,
# and we don't have a new branch name for the target we
# are switching to, then we'd better just be checking out
# what we already had
#
[ -z "$branch$newbranch" ] &&
[ "$new" != "$old" ] &&
die "git checkout: you need to specify a new branch name"

if [ "$force" ]
then
git-read-tree --reset $new &&
Expand All @@ -47,6 +66,10 @@ fi
# be based on them, since we re-set the index)
#
if [ "$?" -eq 0 ]; then
if [ "$newbranch" ]; then
echo $new > "$GIT_DIR/refs/heads/$newbranch"
branch="$newbranch"
fi
[ "$branch" ] && ln -sf "refs/heads/$branch" "$GIT_DIR/HEAD"
rm -f "$GIT_DIR/MERGE_HEAD"
fi

0 comments on commit 91dcdfd

Please sign in to comment.