获取git stash --patch以忽略我已经添加的更改

时间:2013-12-14 04:36:34

标签: git version-control

有没有办法以只询问未分期更改的方式运行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的更改?

2 个答案:

答案 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以后运行补丁文件。