GitHub解决冲突失去的提交历史

时间:2017-01-31 09:48:46

标签: git github version-control merge

这件事发生在你身上吗?

我们的开发团队最近调动了我们的代码库和工作实践到GitHub而不是使用GitLab。我们的分支机构如下:

  1. 分段
  2. 开发
  3. 个别分支1 [此问题将被称为branch1]
  4. 个别分支2 [此问题将被称为branch2]
  5. 个别分支3 [此问题将被称为branch3]
  6. 等...
  7. 我们遇到过这样的情况:分支1完成了他们必须完成的工作,但是在合并回Development之前,他们从Development分支到branch1进行了合并。他发现存在合并冲突,因此我使用了GitHub的Resolve Conflicts按钮(它将我发送给他们方便的网络工具以解决冲突...请参阅此处https://help.github.com/articles/resolving-a-merge-conflict-on-github/)。一旦发生冲突,他就会从branch1向Development打开一个pull请求,以便在合并之前进行审核。我们注意到,他在手动合并冲突之前的所有提交历史和代码更改都已消失,并且无法查看其更改。更奇怪的是,他的代码似乎已经合并到了开发中,但是没有发生这种情况的历史,所以我们不知道它是如何发生的。

    我们遇到与branch2类似的情况。从Development到branch2合并时存在冲突,使用GitHub上的合并工具,所有提交和代码更改的历史记录都消失了。但是,没有任何代码意外地合并到Development。

    branch3也有合并冲突,但是使用命令行(GitBash)来解决这些冲突,当他准备好合并到Development时,提交历史仍然存在。

    我们对branch1和branch2的问题可能与通过GitHub的合并工具有关吗?谷歌没有太大的帮助..

    谢谢:)

1 个答案:

答案 0 :(得分:1)

这是由合并和拉取请求时的步骤引起的。 拉出请求(PR)需要提前合并。 PR的目的是让其他人在真正执行之前审查合并。如果要将branch1合并到Development分支中,可以基于Development分支创建pull请求并比较branch1。 PR批准后,branch1可以合并到Development分支中。

从开发到branch1的步骤合并是不必要的或有害的,如果您合并它将branch1合并到Development。我们可以通过下图来说明:

A---B---C       branch1
     \
      D---E     Development

将开发合并到branch1后

A---B---C---F    branch1
     \      /
      D---E      Development

将分支1合并到开发分支后,它只导致分支1和开发点提交。这是一次快速合并。

A---B---C---F    branch1, Development
     \      /
      D---E    

所以你只需要将branch1合并到Development分支,图形应该是

A---B---D---E--- F’      branch1
     \          /
      ----C----     Development

要将branch1和Development恢复到worongly merge之前的状态(commitC和E分别),您需要以下命令:

git checkout branch1
git reset --hard <commit id for C>
git checkout Development
git reset --hard <commit id for E>