Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git恢复的另一个选项_Git - Fatal编程技术网

Git恢复的另一个选项

Git恢复的另一个选项,git,Git,我遇到了一个问题,我试图使用git revert创建一个新的提交,该提交实际上与主分支中的旧提交重复了几步。我一直在这个问题上纠缠了很长一段时间,因为每次尝试运行git revert时,我都会首先遇到以下错误: error: Your local changes would be overwritten by revert. hint: Commit your changes or stash them to proceed. fatal: revert failed` 我尝试添加、提交和推送

我遇到了一个问题,我试图使用git revert创建一个新的提交,该提交实际上与主分支中的旧提交重复了几步。我一直在这个问题上纠缠了很长一段时间,因为每次尝试运行
git revert
时,我都会首先遇到以下错误:

error: Your local changes would be overwritten by revert.
hint: Commit your changes or stash them to proceed.
fatal: revert failed`
我尝试添加、提交和推送,然后再试一次,但我得到了相同的错误,它让我一次又一次地合并相同的冲突。我试着把它藏起来,但还是不走运

git stash
Saved working directory and index state WIP on (no branch): <branch>
git revert <sha>
error: could not revert <sha> 
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'`
git隐藏
已保存的工作目录和索引状态WIP on(无分支):
git还原
错误:无法还原
提示:解决冲突后,标记更正的路径
提示:使用“git add”或“git rm”
提示:并使用“git commit”提交结果`

此时,我只想在提交时克隆存储库作为当前存储库,并将其添加为头部。我试图保留我提交的历史记录,否则我将使用git checkout


如有任何建议,将不胜感激

与@phd所说的类似,您有两个不同的错误。第一个是有意义的,因为您有未提交的更改。这第二个对你的意图没有意义,因为你处在一个合并冲突的中间,而不是在一个分支上。不确定您是否仍然处于这种情况,但我会运行一个
git merge--abort
然后
git stash
然后
git revert
,您应该是金色的。

既然您在
主控
中声明了提交的重复,我假设您正在处理另一个分支,并且您的历史记录如下所示:

A-B-C-D   master
 \E-ζ-F*  dev
其中,
ζ
几乎是
C
的副本,
F*
是一些后续提交加上脏工作树。既然您提到“它让我一次又一次地合并相同的冲突”,那么您可能尝试将
master
合并到
dev
,这可能会导致冲突,因为
ζ
C
不是实际的重复项-可能会有一些注释添加了冲突等

所以我最好的猜测是你真的想要

A-B-C-D      master
 \    ↓
  E--D'-F'*  dev  (or maybe E--F--D'*)
i、 e.将
master
合并到
dev
上,而不使用几乎重复的commit
ζ

您已经执行了
git stash
以摆脱脏状态。如果你是迄今为止拉过你分支的唯一用户,你可以考虑通过<代码> Git ReBase- e>代码>重写历史,并简单地从历史中清除<代码> ZE> <代码>,以获得临时分支<代码> E-F 。然后
git merge master
获得
E-F-D'
,并可选择
git rebase-i E
再次交换
F
D'
。最后,
git stash pop
返回您的工作树,希望没有任何合并冲突


如果您不能选择重写历史记录,则可以在修复合并冲突后直接
git merge master
获取
E-ζ-F-D'
。无需恢复更改,但让合并注释包含有关此更改的信息,并可能在
ζ
中添加
git注释

您的问题不清楚。您是否正在尝试从master向另一个分支提交?如果是这样,你可以选择它。你的第二个错误与第一个不同。第一个是“您有未提交的更改,将其隐藏起来”,第二个是“您有合并冲突,修复它们,添加并提交”。与@phd所说的类似,您有两个不同的错误。第一个是有意义的,因为您有未提交的更改。这第二个对你的意图没有意义,因为你处在一个合并冲突的中间,而不是在一个分支上。不确定您是否仍然处于这种情况,但我会运行一个
git merge--abort
然后
git stash
然后
git revert
,您应该是golden。“我只想将commit处的存储库克隆为当前,并将其添加为head”,如果您希望历史记录commit作为当前分支的头,您应该使用
git reset
git cherry pick