首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅恢复工作目录中的更改

如何仅恢复工作目录中的更改
EN

Stack Overflow用户
提问于 2012-10-31 04:14:00
回答 6查看 3.8K关注 0票数 6

我有一个损坏的合并,我想恢复工作目录中的更改,以找出它损坏的位置。我想保留索引,这样我就可以向它添加修复程序,并最终将它们签入。本质上,我希望工作目录与头目录相同,但不修改索引。这实际上会将基于索引的反向补丁应用到工作目录。这似乎与git reset正好相反。

你如何在git中做到这一点?

EN

回答 6

Stack Overflow用户

发布于 2014-06-17 05:26:10

您可以提交索引,重置工作目录,然后重置提交。

代码语言:javascript
复制
$ git commit -m "blah"
$ git reset --hard
$ git reset --soft HEAD^

编辑:看起来我误解了原来的问题。

要在不干扰索引的情况下将工作树重置为头部,请执行以下操作:

代码语言:javascript
复制
$ git checkout -- .
$ git diff --cached | git apply --reverse

(看起来@Brice已经给出了答案。)

票数 6
EN

Stack Overflow用户

发布于 2016-08-09 17:05:29

我看着一个简单的命令做同样的事情,但是没有。虽然你在你的问题中说明了正确的方法:

这实际上会根据索引将反向补丁应用到工作目录。

所以答案很简单:

代码语言:javascript
复制
git diff --no-color --staged | git apply --reverse

所以不需要提交任何东西,只需应用索引的反转即可。

请注意,如果工作目录中的某些更改未暂存到索引中,则不会以这种方式撤销这些更改。

如果要还原工作目录中的所有内容(即使是未索引的更改和新文件),请在此之前运行以下命令:

代码语言:javascript
复制
git stash save --include-untracked --keep-index

如果您不打算重用它,可以在之后将其删除:

代码语言:javascript
复制
git stash drop

如果要还原除未跟踪的文件(不在索引中的新文件)之外的所有内容

在此之前执行:

代码语言:javascript
复制
git checkout .

下面是几个bash函数:

代码语言:javascript
复制
function git-unapply-index {
    git diff --no-color --staged | which git apply --reverse
}

function git-revert-workdir-keep-untracked {
    git checkout .
    git-unapply-index
}

function git-revert-workdir-all {
    git stash save --include-untracked --keep-index
    git stash drop
    git-unapply-index
}
票数 5
EN

Stack Overflow用户

发布于 2012-10-31 15:25:05

可以为现有的提交生成反向补丁,而不是为索引中的更改生成。

索引中的更改可能在diff branch.

  • Execute git revert -n <commit>

  1. 提交

它将在您的工作目录中为您的提交生成反向补丁。

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

https://stackoverflow.com/questions/13146908

复制
相关文章

相似问题

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