6

这是我所做的:

  • 创建文件夹 testA
  • 创建一个文件“a.txt”,其内容为“a”
  • Git init 进入文件夹 testA
  • 混帐添加。
  • git commit -a -m “第一”
  • 将文件的“a.txt”内容更改为“b”
  • 混帐添加。
  • git commit -a -m "改成 b"
  • git log(获取“first”的提交ID)
  • git 还原 a90deafe08c9f8f0d7b94d3d74d40be2bd65b161

我进入控制台:

error: could not revert a90deaf... first
hint: after resolving the conflicts, mark the
hint: with 'git add <paths>' or 'git rm <paths
hint: and commit the result with 'git commit'

好吧,我想让所有文件都处于上一次提交的状态,我应该知道什么?

更新 我想要的:

  • 我想保留“更改为 b”的提交,并拥有与“第一个”提交完全相同的第三个提交。我从不想丢失任何文件。
  • 处理二进制文件(见下一点)
  • 我不在乎如何管理二进制文件,只要我可以让它们处于提交状态,因此在这种情况下不需要合并。我只是想要一些更简单的东西:将文件 A 从提交 X 替换为提交 Y,不需要合并的复杂性。
4

1 回答 1

16

首先,通过以下方式恢复良好状态:

git revert --abort

接下来,看看你在问什么。 git revert获取要撤消的提交的提交 ID。第一个提交设置a.txt为:

a

第二次提交使其具有:

b

你想恢复第一次提交。所以这就是说你想删除添加的a行,以及添加的文件,这是一个冲突。第一次提交添加了文件,第二次提交修改了它。所以 git 不知道现在你要删除它该怎么做。

我通过“所有处于上一次提交状态的文件”假设您想要回到其中的a.txt状态a

有几种方法可以恢复到以前的状态。如果提交尚未共享,您可以简单地使用git reset

git reset --hard HEAD~1

这表示“将我的工作副本和索引的状态重置为上一次提交”。此时,a.txt便已a在其中。

如果您共享了第二次提交,那么您不想执行上述操作,因为您将重写历史记录,这会导致一大堆其他问题。相反,请恢复提交,就像您在上面尝试做的那样,但使​​用正确的提交。在这种情况下,它是您要恢复的 HEAD 提交:

git revert HEAD

有时恢复提交可能会发生冲突。在这种情况下,它非常类似于合并冲突。您需要处理它们,修复冲突,并使用git add修改后的文件或使用git rm删除文件。完成后,git revert --continue将让该过程完成。

更新

无需进行任何花哨的合并即可恢复先前状态的最简单方法是使用git checkout. 你可以做:

git checkout HEAD~1 -- a.txt
git commit -m "Reverted to the previous version."

没有合并,没有大惊小怪。:-) HEAD~1当然可以是任何提交。我只是根据您的示例使用了它。

于 2012-10-22T09:37:33.187 回答