From: Linus Torvalds Date: Tue, 21 Jun 2005 16:47:37 +0000 (-0700) Subject: Add "git checkout" that does what the name suggests X-Git-Tag: v0.99~222 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/303e5f4c325d008c68e5e70e901ab68b289ade2e?ds=inline Add "git checkout" that does what the name suggests It is careful by default and refuses to overwrite old info, but if you want to force everything to be re-read, use the "-f" flag. Some day I'll make it take individual filenames too. Right now it's all-or-nothing. --- diff --git a/Makefile b/Makefile index bf63984bb9..3372269f5a 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,7 @@ SCRIPTS=git git-apply-patch-script git-merge-one-file-script git-prune-script \ git-pull-script git-tag-script git-resolve-script git-whatchanged \ git-deltafy-script git-fetch-script git-status-script git-commit-script \ git-log-script git-shortlog git-cvsimport-script git-diff-script \ - git-reset-script git-add-script + git-reset-script git-add-script git-checkout-script PROG= git-update-cache git-diff-files git-init-db git-write-tree \ git-read-tree git-commit-tree git-cat-file git-fsck-cache \ diff --git a/git-checkout-script b/git-checkout-script new file mode 100755 index 0000000000..e8e777f1f2 --- /dev/null +++ b/git-checkout-script @@ -0,0 +1,30 @@ +#!/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 +force=0 +while [ $i -lt ${#args} ]; do + case "${args[$i]}" in + "-f") + force=1;; + "") + ;; + *) + echo "unknown flag ${args[$i]}" + exit 1;; + esac + i=$(($i+1)) +done + +if $force +then + git-read-tree --reset $new && + git-checkout-cache -q -f -u -a && + echo $new > "$GIT_DIR/HEAD" +else + git-read-tree -m -u $old $new && echo $new > "$GIT_DIR/HEAD" +fi