Git Revert 删除了另一个开发人员的工作。为什么?



在我的公司中,我们的git工作流量是这样的,我们从 master创建了一个 feature branch,在该feature branch上开发直到完成。然后,我们创建一个将PR合并到master,然后将feature branch合并到test。合并到test将应用程序部署到测试服务器。一旦测试完成并获得了绿灯,开发人员将审查PR并将其合并到master,然后将应用程序部署到登台环境中。

我在功能分支上工作,并意外地将test合并到feature branch(而不是将master合并到feature branch中(,因此当我创建PR时,它具有我所做的所有更改,但还具有合并的其他开发人员的更改到test,但不在master中。我恢复了合并:git revert -m 1 <commit before merge hash>,然后将该分支合并为test。之后,我从一个非常愤怒的开发人员那里收到一条消息,说我删除了他们的工作(他们的工作是在test中(。我想了解为什么会发生这种情况,我想在仅在分支机构中合并之前,创建PR,然后合并到test之前恢复为提交,并希望将我的分支与该开发人员在test中的更改合并。不过,它似乎删除了他们的工作。谁能向我解释为什么会发生这种情况?

来自git帮助:

git -reverver-还原一些现有的consits

-m parent-number,-mainline parent-number

通常您无法恢复合并,因为您不知道合并的哪一侧应视为主线。此选项指定了主线的父号码(从1开始(,并允许恢复相对于指定父的更改。

恢复合并提交声明,您永远都不希望合并带来的树更改。结果,后来的合并只会引入不是先前恢复合并的祖先所引入的树木变化。这可能是您想要的也可能不是您想要的。

我们在文档中看到的恢复合并的提交可能不是直接的。

由于这个原因,很难告诉您为什么这不知道您的历史树。

但是,当这种情况发生时,我通常不会使用git-revert进行合并。

相反,我使用以下简单方法,这些方法也可能适合您:

首先与您的团队成员进行交流,您将要解决问题,并且一旦完成后,他们应该同步。

转到您的feature分支,然后将其重置为不良合并之前的提交:

$ git reset --hard hash_of_commit_prior_to_bad_merge
$ git push -f

您的分支已清理。现在,转到test分支并进行相同的操作,首先在合并之前重置并推动更新遥控器。

此时两个分支都干净。

现在,您可以通过更新分支并正常遵循过程重新开始。

让人们知道它是固定的。

这种方法很干净,只要您在发生后立即进行操作,并且您的团队允许您强迫推动。

当您使用featuretest分支时,我不明白为什么不允许它。

即使您稍后再这样做并从test中删除其他人的提交,您可以在完成后再次合并。

如果这只是一个单一的提交,git revert尽管会创建一个新的提交,但要合并提交,摆脱它绝对比振兴更简单,更有效,更容易出错。

我希望这会有所帮助。

我想失踪的提交不是太多。然后在2个命令下方做一些帮助。

1(在分支上,错过的提交以前存在,

$ git reflog | grep -i "key-word-of-the-commit"

从上面获取commit-id-missed

最好检查提交内容(2(

$ git show commit-id-missed

2(在您要合并此提交的目标分支上,

$ git cherry-pick commit-id-missed

它将恢复您所做的所有故障过程。但是,如果提交太多,那将是一段时间浪费灾难。

最新更新