首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不移动头部的情况下重新设置工作树?

如何在不移动头部的情况下重新设置工作树?
EN

Stack Overflow用户
提问于 2016-10-17 20:31:24
回答 3查看 3.1K关注 0票数 18

给定一个git分支,其中有一些提交(C是最近提交的):

代码语言:javascript
复制
A -> B -> C

如何重置工作区,使所有文件都处于提交B状态,但HEAD仍处于C状态?

我看过git-reset,但这些选项似乎都没有帮助。手册页显示,所有不同的模式都会移动:

-软件根本不触及索引文件或工作树(但重置头部,就像所有模式一样)。

我已经试过git reset HEAD~了,但这让我动脑筋。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-17 20:45:46

git checkout [-p|--patch] [<tree-ish>] [--] <pathspec>... git checkout with <paths>--patch用于从索引中将修改或删除的路径还原到原始内容,或者用命名<tree-ish>的内容替换路径(通常是提交)。

因此,您需要在存储库的根上运行此操作(对于任何子树或文件也很好):

代码语言:javascript
复制
git checkout HEAD~ -- .

这将导致git应用必要的更改将文件还原为HEAD~状态,这些更改将出现在索引中。

票数 19
EN

Stack Overflow用户

发布于 2016-10-17 20:44:42

您可以使用硬重置和软重置的组合:

代码语言:javascript
复制
git reset --hard B
git reset --soft C

第一种方法是将HEAD移动到B,并使所有文件看起来像B。然后,第二个文件将其移回C,而不更改任何文件。

该方法的优点是您没有处于分离状态,而且BC之间的所有差异都将显示为上一次实际提交的逆差。你还会在原来的树枝上。

您可能必须将C指定为SHA-1而不是参考名称,除非您为此目的专门创建了一个名称。

票数 10
EN

Stack Overflow用户

发布于 2016-10-17 20:44:22

只需使用git checkout

代码语言:javascript
复制
$ git checkout HEAD~
$ # Or
$ git checkout HEAD^
$ # Or
$ git checkout B

这将使您进入一个独立的头部状态,其中的头是脱离一个分支。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40095142

复制
相关文章

相似问题

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