如何使用git执行hg revert --all命令?

3
当使用Mercurial时,可以发出以下命令: hg revert --all --rev <revision> 工作目录的内容设置为指定的<revision>,但您保持在树中的当前位置(相同的父级、分支等)。
如何在git中实现这一点? 它应该像git reset --hard <commit>一样行为,而不移动分支指针。
简而言之 git config alias.revert-all 'read-tree -um HEAD' git revert-all <commit> 我找到的所有变体的比较/测试可以在此处找到:http://git.io/vk9it

我不想成为那个人,但我刚刚发现使用hg-git是在git中进行任何操作最简单的方法。 - moswald
1
好吧,这就是Git,它不一定要容易 :) - Florian Fida
3个回答

1
git read-tree -um @ $thatcommit

我会的。那就是“将索引和工作树从HEAD(也就是@提交)转换为$thatcommit,与checkout类似(但不会影响HEAD)。” 当你所做的事情不适合任何方便命令时,核心命令可以帮助你:-) 如果你需要清除未提交的更改,则可能需要使用git reset --hard,并可能选择一些git clean选项以首先清除完全未跟踪的文件,git真的不喜欢在没有明确命令的情况下覆盖未提交的工作。

就是这样!昨天我找到了read-tree并且在尝试使用它,但是我只能让它与索引一起工作。谢谢! - Florian Fida

0
为了完整起见,这里提供另一种(较慢)的选择:
``` git diff --cached --full-index --binary | git apply --reverse --cached ```
仅更新索引,强制其发出到工作目录,可以执行以下操作:
``` git checkout-index -fa && git clean -dxf ```

-1
工作目录的内容设置为指定目录,但您仍停留在树中的原位置(相同的父级、分支等)。
在 Git 中,您的 HEAD 可以指向单个提交。您不能同时拥有多个 HEAD(除非使用 git new-workdir,然后您将拥有 n 个存储库副本)。
唯一可能类似于此的事情(但再次强调,这不是您想要的)是使用分支(与 hg 中相同)。
一旦您拥有多个分支,您可以在每个分支上拥有不同的 HEAD。
您不必使用 reset,您可以在任何给定点简单地分支出:
git checkout -b 然后,您将拥有一个新的分支,指向所需的父级。
在 Git 中,当你执行 git revert 命令时,虽然你仍在当前分支上,但是你的父提交是当前提交之前的一个提交(历史记录移动到树中给定的位置)。

我理解分支的概念,这已经很远了...在一个仓库中不可能有多个HEAD,这也不是我要求的。如果我的问题不够清晰,请评论一下,我会尽力让它更好...顺便说一句,我没有投反对票,但我可以理解为什么有人会这样做,无意冒犯,但你写的东西是明显错误的(多个HEAD,git revert移动到一个点)。只是这么说... - Florian Fida

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接