]> git.ipfire.org Git - thirdparty/git.git/blame - git-reset.sh
Merge branch 'gl/cleanup' into gl/cleanup-next
[thirdparty/git.git] / git-reset.sh
CommitLineData
40d8cfe4 1#!/bin/sh
45d197a4 2
806f36d4
FK
3USAGE='[--mixed | --soft | --hard] [<commit-ish>]'
4. git-sh-setup
2f9d685c 5
6ff0b1c5 6tmp=${GIT_DIR}/reset.$$
45d197a4
JH
7trap 'rm -f $tmp-*' 0 1 2 3 15
8
c68998f5 9update=
45d197a4
JH
10reset_type=--mixed
11case "$1" in
12--mixed | --soft | --hard)
13 reset_type="$1"
14 shift
15 ;;
2f9d685c
CS
16-*)
17 usage ;;
45d197a4
JH
18esac
19
ac83aa2e
JH
20case $# in
210) rev=HEAD ;;
221) rev=$(git-rev-parse --verify "$1") || exit ;;
23*) usage ;;
24esac
2ad77e67 25rev=$(git-rev-parse --verify $rev^0) || exit
45d197a4
JH
26
27# We need to remember the set of paths that _could_ be left
28# behind before a hard reset, so that we can remove them.
29if test "$reset_type" = "--hard"
30then
c68998f5 31 update=-u
45d197a4
JH
32fi
33
34# Soft reset does not touch the index file nor the working tree
35# at all, but requires them in a good order. Other resets reset
36# the index file to the tree object we are switching to.
37if test "$reset_type" = "--soft"
38then
39 if test -f "$GIT_DIR/MERGE_HEAD" ||
40 test "" != "$(git-ls-files --unmerged)"
32173e69 41 then
45d197a4 42 die "Cannot do a soft reset in the middle of a merge."
32173e69 43 fi
45d197a4 44else
c68998f5 45 git-read-tree --reset $update "$rev" || exit
45d197a4
JH
46fi
47
48# Any resets update HEAD to the head being switched to.
49if orig=$(git-rev-parse --verify HEAD 2>/dev/null)
50then
51 echo "$orig" >"$GIT_DIR/ORIG_HEAD"
52else
53 rm -f "$GIT_DIR/ORIG_HEAD"
54fi
dee4e384
JH
55git-update-ref -m "reset $reset_type $*" HEAD "$rev"
56update_ref_status=$?
45d197a4
JH
57
58case "$reset_type" in
59--hard )
c68998f5 60 ;; # Nothing else to do
45d197a4
JH
61--soft )
62 ;; # Nothing else to do
63--mixed )
64 # Report what has not been updated.
215a7ad1 65 git-update-index --refresh
45d197a4
JH
66 ;;
67esac
68
7d0c6887 69rm -f "$GIT_DIR/MERGE_HEAD" "$GIT_DIR/rr-cache/MERGE_RR" "$GIT_DIR/SQUASH_MSG"
dee4e384
JH
70
71exit $update_ref_status