我想重置工作目录的内容以匹配某个修订版本 *,而不像git reset那样更改当前分支指向 * 的提交。git checkout --patch可以做到这一点,但它是交互式的,要求我为每一个想要重置的更改回答yes。这是恼人的,当我重置了很多的变化,在大多数情况下,我宁愿只是重置一切。有没有一种非交互式地使用git checkout --patch(或等效的)的方法?
git reset
git checkout --patch
yes
gstyhher1#
git read-tree-umcommit将索引和工作树重置为该提交(-m选项表示将正在读取的内容合并到索引中--只有一个树和索引,这有点退化),u选项表示完成后更新工作树)。
git read-tree
-um
commit
-m
u
ctzwtxfj2#
正如his answer中提到的jthill,在一般情况下,git read-tree可以做你想做的事情:git read-tree-umcommit但是,如果你想 checkout /重置一个子目录而不是整个树,你需要一个稍微复杂一点的命令:git diff--cachedcommit * -- * subdir|git apply-R --index由于此命令比前一个命令长得多,如果您计划经常使用它,您可能需要为其设置别名:
git diff
--cached
--
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
2条答案
按热度按时间gstyhher1#
git read-tree
-um
commit
将索引和工作树重置为该提交(
-m
选项表示将正在读取的内容合并到索引中--只有一个树和索引,这有点退化),u
选项表示完成后更新工作树)。ctzwtxfj2#
正如his answer中提到的jthill,在一般情况下,
git read-tree
可以做你想做的事情:git read-tree
-um
commit
但是,如果你想 checkout /重置一个子目录而不是整个树,你需要一个稍微复杂一点的命令:
git diff
--cached
commit
*--
*subdir
|
git apply
-R --index
由于此命令比前一个命令长得多,如果您计划经常使用它,您可能需要为其设置别名:
并使用如下:
或者只是: