我使用Git,我知道:
git revert <hash-code>
用于创建一个新提交,该提交将与哈希代码中的过去提交相同。 例如,我有以下提交:
1f74a0e second commit
e72d8b8 first commit
我想恢复第一次提交,所以我使用了:
git revert 1f74a0e
仍然,我收到以下错误:
错误:无法恢复1f74a0e ...首先提交提示:解析后 冲突,标记纠正的路径提示:使用&#39; git add&#39; 或者&#39; git rm&#39;提示:并使用&#39; git commit&#39;
提交结果
至于冲突,我输入:
$ git diff --name-only --diff-filter=U
file.txt
当我打开file.txt时,我看不到任何冲突迹象。
当然会有冲突。我希望git能够采取&#34;第一次提交&#34;并将其复制到第二次提交之上。我该怎么办?
答案 0 :(得分:8)
实际上不是 revert的功能。 Revert没有“带你回去”提交并假装后续提交没有发生。它应用单个提交的逻辑否定 - 以及单独提交的 - 留下后续提交。
假设您有一些文件的初始提交 - 为简单起见,我们称之为提交#1,文件如下所示:
One
Two
Three
Four
现在假设您有一个更改一行的提交#2:
One
2
Three
Four
最后,提交更改不同行的#3:
One
2
Three
4
如果您尝试还原提交#2,它将仅撤消该提交中更改的行,并保留提交#3中引入的更改,因此结果将为:
One
Two
Three
4
现在,如果有后续提交更改了与您尝试还原的提交相同的行,那么您将发生冲突。例如,假设你有一个提交#4也改变了第二行:
One
TWO
THREE
4
现在,如果您的HEAD是#4提交并且您尝试还原提交#2,则会发生冲突。 Revert期望返回第二行 - 撤消commit#2中所做的更改。因此,它希望第二行当前为2
,然后将其恢复为之前提交的内容,并将其设置为Two
。
然而,由于提交#4 还更改了它,因此该期望无效。所以你有冲突。
如果你的目标不是要恢复,而是回到提交#1并忽略所有那些自那时以来发生的变化,那么你想要reset
而不是revert
。
git reset --hard 1
答案 1 :(得分:0)
您的索引中很可能已经存在未解决的冲突,可能是因为某些合并已经存在,或者还原本身导致了冲突。无论如何,您需要解决冲突并提交。
git status
# You would find files with conflicts
# resolve the commits
git add -u
git commit
答案 2 :(得分:0)
我正在补充@爱德华的答案。首先,revert命令要求“您的工作树必须是干净的(HEAD提交没有任何修改)”(请参见文档here)。 revert 命令将还原给定提交的更改,并将当前状态与要还原其更改的提交的PARENT进行比较。如果当前状态和该PARENT发生冲突,则git将指出这一点。如果没有,您将不会发生冲突。
以下是基于@Edward的示例:
假设您有三个修改文件的提交:
commit1:
One
Two
commit2
One
2 # < we introduced this changed in commit 2
commit3
One
2
three # < we introduced this change in commit 3
如果您从当前状态还原提交2引入的更改(提交3,假设清除了3,即HEAD提交没有任何修改),则git将
commit 2
引入的修改,将2
改回two
three
中引入的commit 3
行。因为当前状态(commit 3
)与我们正在还原(commit 1
)的提交的父级(commit 2
)不冲突,所以不会发生冲突现在,假设您的情况有所不同:
commit1:
One
Two
three
commit2
One
2 # < we introduced this changed in commit 2
three
commit3
One
2
3 # < we introduced this change in commit 3
如果您从当前状态(commit 2
恢复commit 3
引入的更改,假设清除了三个,即HEAD提交没有任何修改),git将会
2
改回两个`commit 3
中引入的行与commit 2
的父行进行比较并表明存在冲突:行three
更改为3
并与该行的父行(提交1)发生冲突。提交我们正在还原的更改(提交2)答案 3 :(得分:-1)
Git通常会告诉您解决冲突,如果您在目录中编辑了但未提交的文件,即使它们不会直接影响您的提交。首先存储你编辑过的每一个