是否有一个
git stash
命令可以隐藏您的更改,但也将它们保留在工作目录中?所以基本上一步就能实现 git stash; git stash apply
?
git stash
然后 git stash apply
(git stash && git stash apply
) 将隐藏文件并在其之后立即应用隐藏。所以毕竟您将在存储和工作目录中进行更改。
如果您想要一个别名,您可以创建一个别名。只需将类似的内容放入
~/.gitconfig
:
[alias]
sta = "!git stash && git stash apply"
这种方法的缺点是所有文件都会被隐藏并重新创建。这意味着相关文件的时间戳将被更改。 (如果在执行
git sta
之前打开文件,当我尝试保存文件时,Emacs 会抱怨,如果您使用 make
或朋友,可能会导致不必要的重建。)
您可以使用
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
所做的
所有事情。 例如,它不会将分支名称附加到提交中,例如“
stash@{0}: On myBranch: Stash commit message
”。
$ git add modified-file.txt
(OR $ git add . ---- for all modified file)
$ git stash save --keep-index "Your Comment"
git commit -m "Your already staged content (May be empty)" #(Commit index)
git add -A #(stage remaining 'unstaged' contents)
git commit -m "My works so far (Unstaged)" #(Working directory)
git tag stash #(mark the commit with 'stash' tag)
git reset HEAD^ #(1st reset (--mixed): Unstaged)
git reset --soft HEAD^ #(2nd reset (--soft): Staged (Skip if your index was empty))
现在你有一个提交标记的存储可供你使用,无论如何都不可能做git stash pop
,但你可以从创建的“存储”标签中执行创建补丁或重置文件等操作,你的工作目录文件也是顺便说一句,完好无损。
current_branch=`git branch --show-current`
git checkout -b stash #(create and switch to new branch 'stash')
git commit -m "Your already staged content (May be empty)" #(Commit index)
git add -A #(stage remaining 'unstaged' contents)
git commit -m "My works so far (Unstaged)" #(Working directory)
git reset HEAD^ #(1st reset (--mixed): Unstaged)
git reset --soft $current_branch #(2nd reset (--soft): Staged)
git checkout $current_branch #(Now go back to where you've left with your working dir and staged status intact)