git:结帐时自动存储+弹出

时间:2018-01-26 08:55:53

标签: git git-stash

如果我做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?

3 个答案:

答案 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