我可以非交互式地使用`git checkout --patch`吗?

时间:2014-07-01 16:22:48

标签: git

我想重置我的工作目录的内容以匹配某些修订版而不更改我的当前分支指向的提交,如git reset所做的那样。 git checkout --patch执行此操作,但它以交互方式执行此操作,要求我针对要重置的每个更改回答yes。当我重置大量更改时,这很烦人,在大多数情况下,我宁愿重置所有内容。

有没有办法以非交互方式使用git checkout --patch(或等效的)?

2 个答案:

答案 0 :(得分:2)

  

git read-tree -um commit

将索引和工作树重置为该提交(-m选项表示要将正在读取的内容合并到索引中 - 只有一个树和索引这有点退化的情况) ,u选项表示完成后更新工作树。)

答案 1 :(得分:0)

jthill中提及的his answer,在一般情况下git read-tree可以做您想做的事情:

  

git read-tree -um commit

但是,如果您希望能够检出/重置子目录而不是整个树,那么您需要一个更复杂的命令:

  

git diff --cached commit -- subdir | {{3 }} -R --index

由于此命令比以前命令长得多,如果您打算经常使用它,您可能想为它设置一个别名:

git config --global alias.reset-checkout '!f() { git diff --cached "$@" | git apply -R --index; }; f'

并使用如下:

git reset-checkout 451a9a4 -- path/to/directory

或者只是:

git reset-checkout 451a9a4