如何自动检查自上次存储以来是否没有引入任何更改并将其删除?

时间:2015-10-19 17:40:05

标签: git git-stash

用例场景如下:

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"一个很好的答案。

1 个答案:

答案 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应用存储 - 这样可以在切换后保存一条命令分支。