5

在我们的 git repo 中,我们不小心做了一个提交,删除了我们所有的文件。此提交已推送到我们的中央服务器,并已被其他开发人员拉下并构建服务器,因此重写历史以撤消此操作并不理想。相反,我们进行了另一次回滚提交,以将所有文件恢复到之前的状态,并在两者之间进行了另一次尝试的回滚提交,以某种方式仅恢复了一些文件。

cc043989 Rollback commit (goes back to 4bf31def)
f5d7f10e Failed rollback commit
cd60376f Delete all files commit
4bf31def Last good commit
.
.
.

我们担心的是这是否会导致任何长期影响,特别是关于合并到/从功能分支和到/从子树存储库。如果将来要不断进行合并或其他更具挑战性的事情,那么可能值得重写历史并手动处理构建服务器/其他开发人员存储库。

4

3 回答 3

1

假设您的历史记录如下所示:

A --- B --- C --- D 大师
 \
  E --- F 话题

在提交“B”中,您不小心删除了所有文件。在提交“C”中,您恢复所有文件。

当您将主题分支合并到主分支时,您将获得比其他方式更多的合并冲突。我建议重写历史,就好像文件从未被删除一样,因为保留该提交并没有真正的好处(除非它是一个非常公共的分支)。

要删除提交,

git checkout master
git rebase -i 4bf31def

然后注释掉错误的提交:

# cc043989 回滚提交(回到 4bf31def)
# f5d7f10e 回滚提交失败
# cd60376f 删除所有提交的文件
4bf31def 最后一次好的提交

好消息是你可以慢慢来。您可以继续工作并稍后修复历史记录,也可以现在修复它。

于 2013-01-24T00:27:57.323 回答
0

我想说的简单答案不要担心。

如果它确实成为一个问题,你可能不得不结束有问题git rebase的提交。它将改写历史,但到那时它可能是不可避免的。

于 2013-01-24T00:24:55.443 回答
0

如果您保留回滚,结果将类似于删除所有文件,然后添加所有文件。回滚之前的任何更改都会发生冲突,因为您将有两个用于任何文件的源。

子树也会受到同样的影响,您将有一个删除所有内容的提交和另一个重新创建它的提交,从而使以前的任何更改都被视为冲突。

于 2013-01-24T01:47:15.660 回答