Merge branch 'jc/stash-create'
* jc/stash-create: git-stash: Fix listing stashes git-merge: no reason to use cpio anymore Revert "rebase: allow starting from a dirty tree." rebase: allow starting from a dirty tree. stash: implement "stash create"
This commit is contained in:
commit
5e389c430d
11
git-merge.sh
11
git-merge.sh
@ -28,20 +28,19 @@ allow_trivial_merge=t
|
|||||||
|
|
||||||
dropsave() {
|
dropsave() {
|
||||||
rm -f -- "$GIT_DIR/MERGE_HEAD" "$GIT_DIR/MERGE_MSG" \
|
rm -f -- "$GIT_DIR/MERGE_HEAD" "$GIT_DIR/MERGE_MSG" \
|
||||||
"$GIT_DIR/MERGE_SAVE" || exit 1
|
"$GIT_DIR/MERGE_STASH" || exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
savestate() {
|
savestate() {
|
||||||
# Stash away any local modifications.
|
# Stash away any local modifications.
|
||||||
git diff-index -z --name-only $head |
|
git stash create >"$GIT_DIR/MERGE_STASH"
|
||||||
cpio -0 -o >"$GIT_DIR/MERGE_SAVE"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
restorestate() {
|
restorestate() {
|
||||||
if test -f "$GIT_DIR/MERGE_SAVE"
|
if test -f "$GIT_DIR/MERGE_STASH"
|
||||||
then
|
then
|
||||||
git reset --hard $head >/dev/null
|
git reset --hard $head >/dev/null
|
||||||
cpio -iuv <"$GIT_DIR/MERGE_SAVE"
|
git stash apply $(cat "$GIT_DIR/MERGE_STASH")
|
||||||
git update-index --refresh >/dev/null
|
git update-index --refresh >/dev/null
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -437,7 +436,7 @@ case "$use_strategies" in
|
|||||||
single_strategy=no
|
single_strategy=no
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
rm -f "$GIT_DIR/MERGE_SAVE"
|
rm -f "$GIT_DIR/MERGE_STASH"
|
||||||
single_strategy=yes
|
single_strategy=yes
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
34
git-stash.sh
34
git-stash.sh
@ -21,23 +21,17 @@ no_changes () {
|
|||||||
clear_stash () {
|
clear_stash () {
|
||||||
if current=$(git rev-parse --verify $ref_stash 2>/dev/null)
|
if current=$(git rev-parse --verify $ref_stash 2>/dev/null)
|
||||||
then
|
then
|
||||||
git update-ref -d refs/stash $current
|
git update-ref -d $ref_stash $current
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
save_stash () {
|
create_stash () {
|
||||||
stash_msg="$1"
|
stash_msg="$1"
|
||||||
|
|
||||||
if no_changes
|
if no_changes
|
||||||
then
|
then
|
||||||
echo >&2 'No local changes to save'
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
test -f "$GIT_DIR/logs/$ref_stash" ||
|
|
||||||
clear_stash || die "Cannot initialize stash"
|
|
||||||
|
|
||||||
# Make sure the reflog for stash is kept.
|
|
||||||
: >>"$GIT_DIR/logs/$ref_stash"
|
|
||||||
|
|
||||||
# state of the base commit
|
# state of the base commit
|
||||||
if b_commit=$(git rev-parse --verify HEAD)
|
if b_commit=$(git rev-parse --verify HEAD)
|
||||||
@ -84,6 +78,23 @@ save_stash () {
|
|||||||
w_commit=$(printf '%s\n' "$stash_msg" |
|
w_commit=$(printf '%s\n' "$stash_msg" |
|
||||||
git commit-tree $w_tree -p $b_commit -p $i_commit) ||
|
git commit-tree $w_tree -p $b_commit -p $i_commit) ||
|
||||||
die "Cannot record working tree state"
|
die "Cannot record working tree state"
|
||||||
|
}
|
||||||
|
|
||||||
|
save_stash () {
|
||||||
|
stash_msg="$1"
|
||||||
|
|
||||||
|
if no_changes
|
||||||
|
then
|
||||||
|
echo >&2 'No local changes to save'
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
test -f "$GIT_DIR/logs/$ref_stash" ||
|
||||||
|
clear_stash || die "Cannot initialize stash"
|
||||||
|
|
||||||
|
create_stash "$stash_msg"
|
||||||
|
|
||||||
|
# Make sure the reflog for stash is kept.
|
||||||
|
: >>"$GIT_DIR/logs/$ref_stash"
|
||||||
|
|
||||||
git update-ref -m "$stash_msg" $ref_stash $w_commit ||
|
git update-ref -m "$stash_msg" $ref_stash $w_commit ||
|
||||||
die "Cannot save the current status"
|
die "Cannot save the current status"
|
||||||
@ -202,6 +213,13 @@ apply)
|
|||||||
clear)
|
clear)
|
||||||
clear_stash
|
clear_stash
|
||||||
;;
|
;;
|
||||||
|
create)
|
||||||
|
if test $# -gt 0 && test "$1" = create
|
||||||
|
then
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
create_stash "$*" && echo "$w_commit"
|
||||||
|
;;
|
||||||
help | usage)
|
help | usage)
|
||||||
usage
|
usage
|
||||||
;;
|
;;
|
||||||
|
Loading…
Reference in New Issue
Block a user