如何检索git回购中丢失的更改?

如何检索git回购中丢失的更改?,git,merge,conflict,Git,Merge,Conflict,我在一个小工作室工作,这是使用Git的新手,所以我们这里没有Git大师。最近,一位开发人员在推动一个小的更改的过程中,成功地从代码库中完全删除了一系列其他更改 看起来,当他合并时,他合并了一些旧版本,其中一个缺少添加的文件,并且有旧版本的文件。因此,当他将提交推送到服务器时,最终结果是删除了文件,而这些文件的内容现在丢失了许多更改 现在,如果您克隆一个新仓库,主分支中的所有代码都会丢失下图中所有带圆圈的更改。这些更改的提交仍在日志中,只有它们表示的更改不在代码中 基本上,问题可以从这张图中看出:

我在一个小工作室工作,这是使用Git的新手,所以我们这里没有Git大师。最近,一位开发人员在推动一个小的更改的过程中,成功地从代码库中完全删除了一系列其他更改

看起来,当他合并时,他合并了一些旧版本,其中一个缺少添加的文件,并且有旧版本的文件。因此,当他将提交推送到服务器时,最终结果是删除了文件,而这些文件的内容现在丢失了许多更改

现在,如果您克隆一个新仓库,主分支中的所有代码都会丢失下图中所有带圆圈的更改。这些更改的提交仍在日志中,只有它们表示的更改不在代码中

基本上,问题可以从这张图中看出:


我不知道你在问什么,但你几乎可以用它来取回意外删除的内容

我不确定你在问什么,但你几乎可以用它来取回意外删除的内容

最简单的方法是提交合并并让开发人员重做合并,这次是对的

git revert
将记录一个新的提交,该提交将撤消
的效果,这应该是错误的合并提交


由于此更改已经推送到了中央存储库,因此您不应该使用git的任何重写历史魔法。

最简单的方法是提交合并,并让开发人员重新执行合并,这一次是正确的

git revert
将记录一个新的提交,该提交将撤消
的效果,这应该是错误的合并提交


由于此更改已经推送到了中央存储库,您不应该使用git的重写历史魔法。

几天前,我遇到了同样的情况

可能原因

我发现这种合并的可能原因可能是有人使用

git merge -s ours <somebranch>
因此,
origin/master
被重置为发生错误合并之前的状态

一般来说,这不是一个好主意。但我们还是这样做了,因为所有的团队都是本地的,大多数人都知道发生了什么,在发生被迫回归重置的那一刻,没有人在这位破碎的大师身上犯下任何罪行

之后,破坏主程序的开发人员必须重新进行合并,这次是正确的方式


我看到,在不重置remote的情况下,唯一的另一个选择是手动重新合并commit可能已“擦除”的所有内容。这对我来说似乎并不简单。

几天前,我遇到了同样的情况

可能原因

我发现这种合并的可能原因可能是有人使用

git merge -s ours <somebranch>
因此,
origin/master
被重置为发生错误合并之前的状态

一般来说,这不是一个好主意。但我们还是这样做了,因为所有的团队都是本地的,大多数人都知道发生了什么,在发生被迫回归重置的那一刻,没有人在这位破碎的大师身上犯下任何罪行

之后,破坏主程序的开发人员必须重新进行合并,这次是正确的方式


我看到,在不重置remote的情况下,唯一的另一个选择是手动重新合并commit可能已“擦除”的所有内容。这对我来说似乎并不简单。

从该命令的描述中,我无法判断它到底应该能为我做什么。这里似乎没有必要使用reflog。提交仍然在分支中,只是它们的更改没有反映在分支的头提交中。看起来你是对的,斯维克,这个问题是在我的帖子之后编辑的,目的是更好地描述这个问题。从对该命令的描述中,我无法判断它到底能为我做什么。这里似乎没有必要使用reflog。提交仍然在分支中,只是它们的更改没有反映在分支的头提交中。看起来你是对的斯维克,问题是在我的帖子之后编辑的,以便更好地描述问题。我如何确切地使用git revert来实现这一点?我试过的东西似乎都不能正常工作。基本上,我不知道如何撤销错误的合并。我不明白还有什么不清楚。在命令提示符下键入
git revert 9a9b6b
,它将创建一个新的提交,该提交将撤消错误合并提交中的所有更改
9a9b6b
不完全正确--git revert需要-m标志,因为它是正在还原的合并。通过反复试验,我找出了哪个父级给了我想要的还原,尽管我仍然不清楚在还原合并的上下文中选择父级意味着什么。我到底如何使用git revert来实现这一点?我试过的东西似乎都不能正常工作。基本上,我不知道如何撤销错误的合并。我不明白还有什么不清楚。在命令提示符下键入
git revert 9a9b6b
,它将创建一个新的提交,该提交将撤消错误合并提交中的所有更改
9a9b6b
不完全正确--git revert需要-m标志,因为它是正在还原的合并。通过反复试验,我找出了哪个父级给了我想要的恢复,尽管我仍然不清楚在恢复合并的上下文中选择父级意味着什么。
git push --force