首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Git重置为提交,而不将HEAD更改为已分离状态

将Git重置为提交,而不将HEAD更改为已分离状态
EN

Stack Overflow用户
提问于 2012-12-16 05:10:55
回答 3查看 4.1K关注 0票数 21

我希望将git工作副本的文件恢复到给定的提交,而不是将该提交设置为头提交。

如果我对给定的提交进行git签出,则会获得一个分离的头部,并且在提交更改后,提交树将如下所示:

代码语言:javascript
运行
复制
A
|
B
|
C  
| \
D  E

而我想要获得的行为是:

代码语言:javascript
运行
复制
A
|
B
|
C
|
D
| <- git command so my files are restored to C, but my HEAD still points to D
E

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-16 09:31:16

这应该可以做到:

代码语言:javascript
运行
复制
git reset --hard C
git reset --soft D

首先,将HEAD、索引和工作树重置为C

然后将HEAD (并且仅重置HEAD,如“Practical uses of git reset --soft?”中所述)重置为D

请注意,此时的提交将使用C内容创建一个新的提交,将D替换为一个看起来像CD'

这改变了历史,与简单的git reset --hard C没有太大区别。

另一种选择是在D之上使用git revert C,但D在历史记录中仍然可见,这可能是您不希望看到的。

票数 25
EN

Stack Overflow用户

发布于 2015-08-01 09:31:51

VonC answer要求您做一个往返。你可以通过一次“git checkout”来实现同样的功能。

git checkout C ./

请注意,您必须提供./,否则git将实际签出指定的分支或提交。

票数 23
EN

Stack Overflow用户

发布于 2016-12-22 23:35:13

用于此操作的管道命令(适用于编写此类脚本的任何人)为:

代码语言:javascript
运行
复制
git read-tree C
git checkout-index -f -a

虽然由于某些原因我无法理解,但当我从脚本运行此命令时,我还必须在上面的命令之后执行以下操作,否则我会得到一个关于补丁不适用于索引的错误:

代码语言:javascript
运行
复制
git update-index -q --refresh
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13896246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档