如果我做git checkout my-super-branch
git告诉我:
error: Your local changes to the following files would be overwritten by checkout:
somedir/somefile.py
Please, commit your changes or stash them before you can switch branches.
Aborting
有没有一种简单的方法告诉git自动执行stash + pop?
答案 0 :(得分:1)
Git允许流水线操作:
git stash&& git fetch&& git checkout your-branch&& git stash apply
我使用stash
时,您的更改仍在git stash apply
。
解决冲突(如果有的话)。
如果您希望在上面的呼叫之后从存储中删除更改:
git stash drop
否则你可以使用git stash pop
答案 1 :(得分:0)
在结帐时没有用于自动存储的命令行选项。我这样创建了一个脚本checkout.sh
:
#!/bin/bash
git stash && git fetch && git checkout $1 && git stash pop
因此我可以将其与所选分支一起使用:checkout.sh my-branch
答案 2 :(得分:0)
要将更改存储起来并将它们移动到另一个分支,请将其添加到您的 .gitconfig 中:
[alias]
stashonto = "!f() { if [ -z \"$1\" ] ; then echo 'Error: stashonto requires destination branch.\nExample: git stashonto master\nExample: git stashonto -b new-branch 98e7f99e' ; else git stash --include-untracked && git checkout $* && git stash apply ; fi; }; f"
这会创建一个调用 shell 函数的 git 别名,以便我们可以链接多个 git 命令。下面是分解的函数,以便于阅读:
f() {
if [ -z \"$1\" ] ; then
echo 'Error: stashonto requires destination branch.\nExample: git stashonto master\nExample: git stashonto -b new-branch 98e7f99e'
else
# stash everything
(git stash --include-untracked
# switch branch
&& git checkout $*
# apply stash (you must 'git stash drop' to delete the stash if everything goes well)
&& git stash apply)
fi
}
f
警告:检测 stash 是否保存了任何东西还不够花哨,所以如果您没有对 stash 进行任何更改,它将打印“没有本地更改要保存”,然后应用您的以前的 stash .这就是我使用 apply
而不是 pop
的原因。
用法:
# stash changes and apply on master
git stashonto master
# stash changes and apply on new branch 'project' off of commit 98e7f99e
git stashonto -b project 98e7f99e