在交互式rebase期间,我经常发现我想在当前变更集之前进行一些更改,例如如果我有:
A->BCD->E
我想转到:
A->D->BC->E
所以我做了一个交互式rebase,并编辑相关的变更集。所以我希望能够:
reset --soft
这是可能的,还是有更简单的方法来实现这个目标?
答案 0 :(得分:0)
我在官方git邮件列表上提出了这个问题,但没有得到真正的答案。 http://git.661346.n2.nabble.com/Proposal-for-git-stash-add-staged-option-td7629171.html
以下是我现在使用的内容:
这样就可以git cstash "optional message"
将所有staged
个文件藏匿到藏匿处。
它处理脏和清洁状态。
#/bin/sh
#
function evil_git_dirty {
[[ $(git diff --shortstat 2> /dev/null | tail -n1) != "" ]] && echo "dirty" || echo "clean"
}
function create_stash {
# And convert into a stash
if [ "$1" == "" ]
then
# Unnamed stash
git stash
else
# Named stash
git stash save "$1"
fi
}
IS_DIRTY=$(evil_git_dirty)
echo "$IS_DIRTY"
if [ "$IS_DIRTY" == "clean" ]
then
create_stash "$1"
exit 0
fi
# Put staged files in a tempory commit
git commit -m 'temporary, will be stashed soon' --no-verify
# Put everything else in a temporary stash
git add .
git stash
# Remove commit
git reset HEAD^1
git add .
create_stash "$1"
# Pop the temporary stash
git stash pop stash@{1}
git reset .