仅使用 git 存储未暂存的更改(而不是 --keep-index)

iGE*_*GEL 10 git

首先,我确实知道--keep-index. 这不是我想要的,因为它仍然隐藏所有更改,但将暂存的更改留在工作树中。如果可能的话,我只想存储未暂存的文件,而不用git stash --patch.

小智 0

您不能直接执行此操作,但您最终可以仅隔离未暂存或仅暂存的更改,或两者都隔离,甚至根本不使用任何git-stash命令:


git switch -c separated-stashes
Run Code Online (Sandbox Code Playgroud)

相当于旧的checkout -b:创建一个新分支并打开它。它不会改变你的工作树和索引,所以你基本上会得到git status与以前相同的 ' 输出,但这次是在新分支上。与简单的git switch/相反git checkout,它不会在切换分支之前警告您存储或提交更改,因为您是通过-c/显式创建一个全新的分支-b


git commit -m "staged"
Run Code Online (Sandbox Code Playgroud)

在新分支上创建第一个提交,其中仅包含从一开始的分阶段更改。


git add -u && git commit -m "unstaged"
Run Code Online (Sandbox Code Playgroud)

从一开始就使用未暂存的更改创建第二次提交。


git switch - # == git checkout -
Run Code Online (Sandbox Code Playgroud)

返回到您之前所在的分支。

现在您已经存储了所有内容,并且可以cherry-pick随时随地存储您需要的内容(暂存/未暂存)。


这可能看起来有点麻烦,但你可以自由定义一个 git 别名来自动化它:

git config --global alias.bratisla '!git switch -c separated-stashes; git commit -m "staged changes"; git add -u; git commit -m "unstaged changes"; git switch -' # why this name ? : youtu.be/LpE1bJp8-4w
Run Code Online (Sandbox Code Playgroud)