我无法在文件冲突时还原文件.混帐

Tot*_*.js 5 git revert

这就是我所做的:

  • 创建文件夹testA
  • 用它的内容"a"创建一个文件"a.txt"
  • Git init进入testA文件夹
  • git add.
  • git commit -a -m"first"
  • 将文件的"a.txt"内容更改为"b"
  • git add.
  • git commit -a -m"改为b"
  • git log(获取"first"的提交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'
Run Code Online (Sandbox Code Playgroud)

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

更新 我想要的:

  • 我想保持"更改为b"提交并拥有与"第一次"提交完全相同的第三个提交.我永远不想丢失任何文件.
  • 使用二进制文件(参见下一点)
  • 我不关心二进制文件是如何管理的,只要我能在提交状态下使用它们,因此在这种情况下不需要合并.我只是想要更简单的东西:将文件A从提交X替换为提交Y,没有需要合并的并发症.

Joh*_*ter 13

首先,回到一个良好的状态:

git revert --abort
Run Code Online (Sandbox Code Playgroud)

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

a
Run Code Online (Sandbox Code Playgroud)

第二次提交使它具有:

b
Run Code Online (Sandbox Code Playgroud)

并且您想要还原第一次提交.所以说的是你要删除行的添加a,以及添加冲突的文件.第一个提交添加了文件,第二个提交修改了它.所以当你要求删除它时,git不知道该怎么做.

我想通过"在先前的状态中的所有文件提交"你想回去的地方国家a.txt拥有a它.

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

git reset --hard HEAD~1
Run Code Online (Sandbox Code Playgroud)

这表示"将我的工作副本和索引的状态重置为先前的提交".在这一点上,a.txt将有a它.

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

git revert HEAD
Run Code Online (Sandbox Code Playgroud)

有时恢复提交可能会发生冲突.在这种情况下,它非常像合并冲突.您需要解决这些问题,修复冲突并使用git add带有修改的文件暂存,或使用git rm删除文件.一旦完成,git revert --continue将完成该过程.

更新

恢复以前状态的最简单方法是使用,而不必进行任何花哨的合并git checkout.你可以做:

git checkout HEAD~1 -- a.txt
git commit -m "Reverted to the previous version."
Run Code Online (Sandbox Code Playgroud)

没有合并,没有大惊小怪.HEAD~1当然,:-) 可以是任何提交.我只是根据你的例子使用了这个.

  • 但我究竟如何管理这里的冲突呢?这只是一个txt文件的例子,但它假装与二进制文件一起使用,所以为了管理冲突,我必须能够以某种方式从过去获取我的二进制文件,覆盖新文件并提交.但是50个文件怎么样,我不能每次都按文件做到这一点? (2认同)