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

标签 git git-flow

在我的公司,我们的 git 工作流程是这样的,我们创建一个 feature branch来自master ,在此基础上进行开发 feature branch直到我们完成。然后我们创建一个 PR merge 到 master然后 merge feature branchtest 。 merge 到test将应用程序部署到测试服务器。一旦测试完成并且我们获得批准,开发人员就会审查 PR 并将其 merge 到 master这又将应用程序部署到临时环境。

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

最佳答案

来自 git 帮助:

git-revert - Revert some existing commits

-m parent-number, --mainline parent-number

Usually you cannot revert a merge because you do not know which side of the merge should be considered the mainline. This option specifies the parent number (starting from 1) of the mainline and allows revert to reverse the change relative to the specified parent.

Reverting a merge commit declares that you will never want the tree changes brought in by the merge. As a result, later merges will only bring in tree changes introduced by commits that are not ancestors of the previously reverted merge. This may or may not be what you want.

正如我们在文档中看到的那样,恢复 merge 提交可能并不简单。

因此,在不了解您的历史树的情况下,很难告诉您为什么会发生这种情况。

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

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

首先与您的团队成员沟通发生的情况以及您将修复它,一旦您完成,他们应该同步。

转到您的 feature 分支并将其重置为错误 merge 之前的提交:

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

您的分支已清理完毕。现在转到 test 分支并执行相同的操作,首先在 merge 之前重置并强制推送以更新远程。

此时两个分支都是干净的。

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

让人们知道它已修复。

这种方法很简洁,只要您在事件发生后立即执行并且您的团队允许您强制推送,就可以正常工作。

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

即使您稍后执行此操作并从 test 中删除其他人的提交,您也可以在完成后将它们再次 merge 回来。

如果只是一次提交,git revert 就可以了,尽管它会创建一个新的提交,但对于 merge 提交来说,删除它肯定比删除它更简单、更有效并且更不容易出错。正在恢复。

我希望这会有所帮助。

关于Git Revert 删除了另一位开发人员的工作。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56284154/

相关文章:

git - merge 到 master 后功能分支的变化

git - Visual Studio /GIT : No tracked remote branch

git - 通过 git-tfs 使用成熟的 git 而不是 tfs 的原因

git - 在 merge 之前是否需要 checkout 并 pull 远程 git 分支?

git - 使用 git-flow 的多个开发分支

git flow release finish -m 在 cmd 和 Git Bash 中给出不同的行为

混帐 pull : replace local version with the remote version

git - Git : "ssh: connect to host gitlab port 22: connection refused" 的问题

android - 如何最有效地将 git build 版本号与 eclipse 的 apk 版本联系起来?

Git 流和 Github