有没有办法以只询问未分期更改的方式运行git stash --patch
?
从文档中,看起来我应该可以做类似
的事情git stash save --patch --keep-index
但这会让我知道每次更改,即使是我已经git add
编辑
换句话说,如果我做了类似
的事情echo "one" > a
echo "two" > b
git add .
git commit -m "foo"
echo "1" >> a
echo "2" >> b
git add a
如何运行git stash --patch
以便我只询问有关文件b的更改?
答案 0 :(得分:1)
阅读git stash --help
,从版本1.7.10开始,根本无法做任何你想做的事情。
--keep-index
只是保留索引。例如,让我们从这个状态开始:
$ date >> file1
$ date >> file2
$ git add file1
$ git status -s
M file1
M file2
如果您现在git stash --patch
并接受所有更改,您将获得:
$ git status -s
MM file1
即保留索引(使用--patch
时,--keep-index
自动开启)。 git stash
取消了暂存的更改,但由于保留了索引,您可以使用git checkout file1
将其恢复。
现在让我们回到藏匿之前的状态:
$ git stash pop
$ git checkout file1
$ git status -s
M file1
M file2
让我们再次藏匿而不保留索引:
$ git stash --patch --no-keep-index
$ git status -s
$
没有任何类型的更改,没有暂存区域,索引也消失了。
所以不,你不能使用git stash --patch
来隐藏非分段的更改。如果您不是真的需要以交互方式进行选择更改,那么您可以git add
更改您不想添加的更改,然后执行git stash --keep-index
(不使用--patch
):
$ git status -s
M file1
M file2
$ git stash --keep-index
$ git status -s
M file1
请注意不一致的行为:这次file1
没有任何非暂停更改,与我们使用--patch
存储时不同。
答案 1 :(得分:0)
这是不可能的,stash
始终会检查您的索引。存储在内部表示为两个提交 - 一个记录工作目录状态,第二个记录索引状态,它们是HEAD的子节点。
但是,如果您想要将未分期更改放在一边,为什么不在git diff > mypatchfile
以后运行补丁文件。