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://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=303e5f4c325d008c68e5e70e901ab68b289ade2e;p=git.git 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 bf63984bb..3372269f5 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 000000000..e8e777f1f --- /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