我希望将git工作副本的文件恢复到给定的提交,而不是将该提交设置为头提交。
如果我对给定的提交进行git签出,则会获得一个分离的头部,并且在提交更改后,提交树将如下所示:
A
|
B
|
C
| \
D E
而我想要获得的行为是:
A
|
B
|
C
|
D
| <- git command so my files are restored to C, but my HEAD still points to D
E
谢谢
发布于 2012-12-16 09:31:16
这应该可以做到:
git reset --hard C
git reset --soft D
首先,将HEAD
、索引和工作树重置为C
。
然后将HEAD
(并且仅重置HEAD
,如“Practical uses of git reset --soft
?”中所述)重置为D
。
请注意,此时的提交将使用C
内容创建一个新的提交,将D
替换为一个看起来像C
的D'
。
这改变了历史,与简单的git reset --hard C
没有太大区别。
另一种选择是在D
之上使用git revert C
,但D
在历史记录中仍然可见,这可能是您不希望看到的。
发布于 2015-08-01 09:31:51
VonC answer要求您做一个往返。你可以通过一次“git checkout”来实现同样的功能。
git checkout C ./
请注意,您必须提供./
,否则git将实际签出指定的分支或提交。
发布于 2016-12-22 23:35:13
用于此操作的管道命令(适用于编写此类脚本的任何人)为:
git read-tree C
git checkout-index -f -a
虽然由于某些原因我无法理解,但当我从脚本运行此命令时,我还必须在上面的命令之后执行以下操作,否则我会得到一个关于补丁不适用于索引的错误:
git update-index -q --refresh
https://stackoverflow.com/questions/13896246
复制相似问题