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() {
|
||||
rm -f -- "$GIT_DIR/MERGE_HEAD" "$GIT_DIR/MERGE_MSG" \
|
||||
"$GIT_DIR/MERGE_SAVE" || exit 1
|
||||
"$GIT_DIR/MERGE_STASH" || exit 1
|
||||
}
|
||||
|
||||
savestate() {
|
||||
# Stash away any local modifications.
|
||||
git diff-index -z --name-only $head |
|
||||
cpio -0 -o >"$GIT_DIR/MERGE_SAVE"
|
||||
git stash create >"$GIT_DIR/MERGE_STASH"
|
||||
}
|
||||
|
||||
restorestate() {
|
||||
if test -f "$GIT_DIR/MERGE_SAVE"
|
||||
if test -f "$GIT_DIR/MERGE_STASH"
|
||||
then
|
||||
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
|
||||
fi
|
||||
}
|
||||
@ -437,7 +436,7 @@ case "$use_strategies" in
|
||||
single_strategy=no
|
||||
;;
|
||||
*)
|
||||
rm -f "$GIT_DIR/MERGE_SAVE"
|
||||
rm -f "$GIT_DIR/MERGE_STASH"
|
||||
single_strategy=yes
|
||||
;;
|
||||
esac
|
||||
|
34
git-stash.sh
34
git-stash.sh
@ -21,23 +21,17 @@ no_changes () {
|
||||
clear_stash () {
|
||||
if current=$(git rev-parse --verify $ref_stash 2>/dev/null)
|
||||
then
|
||||
git update-ref -d refs/stash $current
|
||||
git update-ref -d $ref_stash $current
|
||||
fi
|
||||
}
|
||||
|
||||
save_stash () {
|
||||
create_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"
|
||||
|
||||
# Make sure the reflog for stash is kept.
|
||||
: >>"$GIT_DIR/logs/$ref_stash"
|
||||
|
||||
# state of the base commit
|
||||
if b_commit=$(git rev-parse --verify HEAD)
|
||||
@ -84,6 +78,23 @@ save_stash () {
|
||||
w_commit=$(printf '%s\n' "$stash_msg" |
|
||||
git commit-tree $w_tree -p $b_commit -p $i_commit) ||
|
||||
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 ||
|
||||
die "Cannot save the current status"
|
||||
@ -202,6 +213,13 @@ apply)
|
||||
clear)
|
||||
clear_stash
|
||||
;;
|
||||
create)
|
||||
if test $# -gt 0 && test "$1" = create
|
||||
then
|
||||
shift
|
||||
fi
|
||||
create_stash "$*" && echo "$w_commit"
|
||||
;;
|
||||
help | usage)
|
||||
usage
|
||||
;;
|
||||
|
Loading…
Reference in New Issue
Block a user