From 303e5f4c325d008c68e5e70e901ab68b289ade2e Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Tue, 21 Jun 2005 09:47:37 -0700 Subject: [PATCH] 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. --- Makefile | 2 +- git-checkout-script | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100755 git-checkout-script 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 -- 2.45.2