保存更改,同时将更改保存在Git的工作目录中

是否存在一个git stash命令来存储您的更改,但也将它们保存在工作目录中?所以基本上是一步完成git stash; git stash apply ?

59112 次浏览

git stashgit stash apply (git stash && git stash apply)将保存文件,并在它之后立即应用stash。所以,毕竟你将有你的变化在stash和工作目录。

如果你想要一个完整的别名,你可以创建它。只需将如下内容放入~/.gitconfig:

[alias]
sta = "!git stash && git stash apply"

这种方法的缺点是所有文件都被存储和重新创建。这意味着所讨论的文件上的时间戳将被更改。(导致Emacs抱怨当我试图保存文件时,如果在我做git sta之前打开它,并且如果你使用make或朋友可能会导致不必要的重建。)

不管怎样,另一种方法是将你想要保留的更改放在舞台上,然后使用--keep-index保存所有内容:

$ git add modified-file.txt
$ git stash push --keep-index

上面的命令将隐藏所有内容,但它将把文件暂放在工作目录中。

git stash的官方Linux内核Git文档git scm:

如果使用--keep-index选项,则所有已添加到索引中的更改都保持不变。

有一个小技巧可以帮助你,不是把东西藏起来,而是FWIW:

git add -A
git commit -m "this is what's called stashing"       (create new stash commit)
git tag stash                               (mark the commit with 'stash' tag)
git reset --soft HEAD~        (Now go back to where you've left with your working dir and staged status intact)

所以现在你有一个提交标记的隐藏在你的处置,它不可能做git stash pop无论如何,但你可以做的事情,如创建补丁或重置文件等从那里,你的工作目录文件也保持完整BTW。

对答案的一个小改进,在实际中可能会使用。

$ git add modified-file.txt
(OR $ git add .    ---- for all modified file)
$ git stash save --keep-index "Your Comment"

你可以使用git stash create创建一个存储提交,然后使用git stash store将其保存到存储:

git stash store $(git stash create) -m "Stash commit message"

这可以保存到一个git别名,使它更方便:

git config --global alias.stash-keep '!git stash store $(git stash create)'


git stash-keep -m "Stash commit message"

注意,这不会像git stash push那样执行一切。例如,它不会将分支名称附加到提交中,例如&;__abc1 &;。