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

mgdq6dx1  于 2023-06-04  发布在  Git
关注(0)|答案(2)|浏览(127)

我想重置工作目录的内容以匹配某个修订版本 *,而不像git reset那样更改当前分支指向 * 的提交。git checkout --patch可以做到这一点,但它是交互式的,要求我为每一个想要重置的更改回答yes。这是恼人的,当我重置了很多的变化,在大多数情况下,我宁愿只是重置一切。
有没有一种非交互式地使用git checkout --patch(或等效的)的方法?

gstyhher

gstyhher1#

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

ctzwtxfj

ctzwtxfj2#

正如his answer中提到的jthill,在一般情况下,git read-tree可以做你想做的事情:
git read-tree-umcommit
但是,如果你想 checkout /重置一个子目录而不是整个树,你需要一个稍微复杂一点的命令:
git diff--cachedcommit * -- * subdir|git apply-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

相关问题