git read-tree --reset -u
是git read-tree -m -u
的替代方案,现在已经在Git 2.22(2019年第二季度)中记录并且可能对于“所有文件的状态将与提交CommitX
中的状态相同”包括合并提交的情况非常重要。
请参见commit b5a0bd6(2019年4月1日),作者为Nguyễn Thái Ngọc Duy(pclouds
)。
(由Junio C Hamano -- gitster
--合并于commit 87e20f8,2019年4月22日)
read-tree.txt
:澄清--reset
和工作树更改
--reset
的描述与438195c(git-read-tree: add "--reset" flag, 2005-06-09, Git v0.99)中的第一次实现保持一致。
也就是说,--reset
会丢弃未合并的条目。
至少对于提交消息而言是正确的,因为我无法确定关于read-tree在本地更改方面的行为。
但在
fcc387d(
read-tree -m -u
:不要覆盖或删除未跟踪的工作区文件,2006-05-17,Git v1.4.0-rc1)中,很清楚“
-m -u
”试图保留本地更改,而
--reset
则被单独列出并将一直覆盖工作树文件。
虽然提交消息中没有说明,但从补丁中可以看出这一点。
我之所以这么远追溯是因为我不相信自己对
unpack-trees.c
代码的理解。到目前为止,我认为历史上相关的更改与当前代码的理解是一致的,即“
--reset
”会丢失本地更改。
尽管老手们可能只是根据“重置”名称猜测它,但这种行为在
git-read-tree.txt
中没有提及。关于此事要更新
git-read-tree.txt
。
顺便说一句,还有另一个与
--reset
有关的更改,这并不明显与本地更改有关,即b018ff6(unpack-trees: fix "
read-tree -u --reset A B
" with conflicted index,2012-12-29,Git v1.8.5.2)。但我非常确定这是关于
--reset
的第一个函数,正确地丢弃未合并的条目。
所以文档现在说明:
`--reset`:
Same as -m
, except that unmerged entries are discarded instead of failing.
When used with -u
, updates leading to loss of working tree changes will not abort the operation.