这个问题已经得到正确回答,但我想解决操作者问题的第一个点——
我不知道如何完成还原。如果像我一样被卡在还原状态中并且在这里寻找答案,请注意。如果您正在还原文件内的某些更改,则可以直接使用
git revert --continue
。但是,如果您卡在还原状态中,那么很可能是因为您试图还原创建文件的提交,并且该文件在任何后续提交中都已被修改。
以一个例子来说明:
1c40cd3 added fileB
4e06828 added fileA
faf29dd (origin/main, origin/HEAD, main) Merged in feature5 (pull request
6e735e3 (origin/feature5, feature5) updated file.txt
fb51fca added file.txt
744ba74 Initial commit
现在,如果您尝试还原fb51fca(添加file.txt)
,它会显示类似于以下内容:
$ git revert fb51fca
CONFLICT (modify/delete): file.txt deleted in parent of fb51fca (added file.txt) and modified in HEAD. Version HEAD of file.txt left in tree.
error: could not revert fb51fca... added file.txt
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git revert --continue".
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".
$ git status
On branch feature6
You are currently reverting commit fb51fca.
(fix conflicts and run "git revert --continue")
(use "git revert --skip" to skip this patch)
(use "git revert --abort" to cancel the revert operation)
Unmerged paths:
(use "git restore --staged <file>..." to unstage)
(use "git add/rm <file>..." as appropriate to mark resolution)
deleted by them: file.txt
您可以清楚地看到file.txt deleted in fb51fca (added file.txt) and modified in HEAD. Version HEAD of file.txt left in tree.
。现在,您可以执行git add -A
和 git commit ...
,但是
还原所做的是回到历史记录(在指定的提交中),删除该提交中所进行的更改,并创建一个新的提交。但问题是,您创建了一个文件,现在还原正在删除它。最终,没有文件可用于暂存,而且正如您所知,git不允许空目录或空提交。
但是有一种解决空提交的方法。就像Ryan建议的那样,您可以执行git commit -m "empty commit to escape revert" --allow-empty
。Git Revert可能没有使用此--allow-empty
标志,这可能是它无法进行提交并陷入还原状态的原因。
总之,如果您陷入还原状态,则可能正在尝试还原不合理的内容。
git revert --abort
对我有用。 - Mark Kahn