用例场景如下:
git checkout branch-1
[introduce some changes I don't want to commit (but want to preserve)]
git stash save "my useful changes"
git checkout branch-2
[do some business with branch-2]
git checkout branch-1
git stash apply # the last stash which is "my useful changes"
现在,我想再次回到branch-2
。我几乎肯定没有引入任何新的更改,因此如果更改相同,我不想创建另一个存储。 我希望仍然使用相同的藏匿信息保存。
我可以手动检查更改是否相同(比较差异)。然后是git reset / git stash; git stash drop
,如果它们确实相同,或者如果它们不相同则创建一个新的存储。
有没有办法更自动地?
不够好的解决方案:
git stash
,它会创建一个新的存储(即使内容和消息与顶部存储的内容和消息相同)。git stash pop
后每次都使用branch-1
,我会松开藏匿消息,因此我每次都必须重新输入。你总是可以说"写一个脚本,它会是自动的"这是真的。我想知道git中是否集成了一个功能。所以我认为一个简单有根据的" No"一个很好的答案。
答案 0 :(得分:0)
您可以使用git index。
从你离开的地方开始:
$ git checkout branch-1
$ git stash apply # the last stash which is "my useful changes"
$ git add -A
# ... work on branch-1
$ git status
如果您开始使用状态有任何更改,您会看到部分文件部分未分页:
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: <file>
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: <file>
#
如果是这种情况,那么您需要更新存储。否则,您只需执行硬重置并继续使用现有存储。
或者,您可以在将保存到存储(使用git stash -k
)之前将更改添加到索引,并使用git stash apply --index
应用存储 - 这样可以在切换后保存一条命令分支。