将提交合并到另一个分支后,将Git推送(强制)

时间:2016-05-06 08:47:32

标签: git merge git-branch

我们使用不同分支的git。一位同事犯了一个错误并将一些不同的提交提交(+推送)到错误的分支(dev分支)。

他所承诺的分支机构应该合并为“#master;'无论如何。我想知道这些步骤是否安全:

  • 将更改从dev分支合并到主
  • 将所有更改推送到origin / master
  • 在dev分支中 - 恢复以便删除所有提交
  • 推送(强制)以确保远程存储库同步(例如:丢弃所有错误的提交)

这些会在以后的存储库中出现任何问题吗? (例如:使用合并提交以及原始提交被删除的事实)?

2 个答案:

答案 0 :(得分:0)

原始提交不会被删除。它们仍处于主分支历史中,在开发分支历史中不再存在。你不应该得到任何问题,除了dev分支的重写历史,这将迫使每个人得到那个"错误" dev分支的状态已经基于并在其上工作以重新定义其本地分支,如git rebase的帮助所述。

答案 1 :(得分:0)

您提出的步骤肯定会符合您的预期。只有一点澄清:git revert实际上创建了一个新的提交(取消了我们正在恢复的提交所做的事情)。因此,在最后一步中,您无需强制以便push

请注意,如果您愿意强行推送(我假设您知道后果),您可以更轻松地做点事情:

  • 让您的同事重置其dev分支,以便它不包含您不想要的提交(例如:git reset --hard <sha1 of commit before he merged>
  • 让他推力,实际上放错了提交(git push -f origin dev

现在他回到错误合并前的位置,所以他可以使用正确的分支重新开始。

更精确:让我们说你有以下提交

-- A -- B
        \- dev
-- C -- D
        \- master

并且您的同事将提交E添加到了错误的分支。然后,根据您提出的步骤,您将拥有:

-- A -- B -- E -- E'
             \     \-- dev
-- C -- D ----F
               \-- master

其中F只是一个合并提交,其中E'是还原。

我们可以看到:就代码而言,每个分支都处于预期状态。但是,提交E在拓扑上不会从dev中删除。