我有一个损坏的合并,我想恢复工作目录中的更改,以找出它损坏的位置。我想保留索引,这样我就可以向它添加修复程序,并最终将它们签入。本质上,我希望工作目录与头目录相同,但不修改索引。这实际上会将基于索引的反向补丁应用到工作目录。这似乎与git reset正好相反。
你如何在git中做到这一点?
发布于 2014-06-17 05:26:10
您可以提交索引,重置工作目录,然后重置提交。
$ git commit -m "blah"
$ git reset --hard
$ git reset --soft HEAD^编辑:看起来我误解了原来的问题。
要在不干扰索引的情况下将工作树重置为头部,请执行以下操作:
$ git checkout -- .
$ git diff --cached | git apply --reverse(看起来@Brice已经给出了答案。)
发布于 2016-08-09 17:05:29
我看着一个简单的命令做同样的事情,但是没有。虽然你在你的问题中说明了正确的方法:
这实际上会根据索引将反向补丁应用到工作目录。
所以答案很简单:
git diff --no-color --staged | git apply --reverse所以不需要提交任何东西,只需应用索引的反转即可。
请注意,如果工作目录中的某些更改未暂存到索引中,则不会以这种方式撤销这些更改。
如果要还原工作目录中的所有内容(即使是未索引的更改和新文件),请在此之前运行以下命令:
git stash save --include-untracked --keep-index如果您不打算重用它,可以在之后将其删除:
git stash drop如果要还原除未跟踪的文件(不在索引中的新文件)之外的所有内容
在此之前执行:
git checkout .下面是几个bash函数:
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
}发布于 2012-10-31 15:25:05
可以为现有的提交生成反向补丁,而不是为索引中的更改生成。
索引中的更改可能在diff branch.
git revert -n <commit>中
它将在您的工作目录中为您的提交生成反向补丁。
https://stackoverflow.com/questions/13146908
复制相似问题