【问题标题】:I'm not able to revert a file while it's conflicting. git当文件发生冲突时,我无法还原文件。混帐
【发布时间】:2012-10-22 09:13:20
【问题描述】:

这是我所做的:

  • 创建文件夹 testA
  • 创建一个文件“a.txt”,其内容为“a”
  • Git init 进入文件夹 testA
  • git 添加。
  • git commit -a -m "first"
  • 将文件的“a.txt”内容更改为“b”
  • git 添加。
  • git commit -a -m "改为b"
  • git log(获取“first”的commit id)
  • git revert 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,不需要合并的复杂性。

【问题讨论】:

    标签: git revert


    【解决方案1】:

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

    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 当然可以是任何提交。我只是根据您的示例使用了它。

    【讨论】:

    • 但是我究竟如何管理这里的冲突呢?这只是 txt 文件的一个示例,但它被假装用于二进制文件,因此为了管理冲突,我必须能够以某种方式从过去获取我的二进制文件,覆盖新文件并提交。但是50个文件怎么样,我不能每次一个文件都做?
    • 这真的是您想要恢复的第一个提交吗?或者只是你想放弃第二次提交并回到第一次提交的状态?如果是这样,那么您将不会有任何合并冲突(如果说“将b 转回a)。如果您确实想要恢复第一次提交,并且您正在使用二进制文件,那么您在任何 VCS 中都会遇到问题。二进制文件通常不可合并,因此任何 VCS 都希望您解决冲突,因为它无法自动为您解决。也许最好解释一下您的内容'正在做。
    • 好吧,我刚刚更新了我的问题,一开始它的定义不是很好。
    • 谢谢,这正是我所需要的!简单而完美! ;)
    • 喜欢不花哨的方法!
    猜你喜欢
    • 2013-12-21
    • 2012-12-28
    • 2015-06-12
    • 1970-01-01
    • 2021-02-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多