【问题标题】:Git commit disappeared after merge合并后 Git 提交消失了
【发布时间】:2016-01-06 11:06:11
【问题描述】:

我正在与一些合作者一起开展一个项目,每个合作者都有一个主分支的远程副本,该副本可能与原始主分支是最新的,也可能不是最新的。

假设其中一个协作者由于提交 X 而拥有一个过期的副本,提交一些 Y 并尝试将其推送到源分支。它失败了,协作者合并更改并再次推送,这次成功。

现在,在查看存储库的历史记录时,无法再找到提交 X,除了它的更改现在位于另一个名为 Merge branch 'master' of https://.... 的提交中。

这是 git 的正常行为吗?这使得跟踪更改变得困难。有什么办法可以避免这个问题吗?

提前致谢!

【问题讨论】:

    标签: git github version-control merge


    【解决方案1】:

    这是 Git 在使用 git merge 时完全正常的行为。 Git 合并将源分支中的提交替换为目标分支中的单个合并提交。

    保留历史记录的一个选项是改用git rebase。在 rebase 中,您的协作者将首先从远程 master 分支引入更改,然后重新提交他的工作。这将使他的本地master 领先于远程,他可以简单地将他的更改推入。考虑下图:

    remote: A -- B -- C -- X
    local:  A -- B -- C -- Y
    

    在完成git rebase origin/master 之后,图表将如下所示:

    remote: A -- B -- C -- X
    local:  A -- B -- C -- X -- Y'
    

    其中Y' 是您的协作者的原始Y 提交稍作修改。现在,您的合作者处于令人羡慕的位置,能够将他的工作直接推送到远程 master 分支上。从他的master 分支执行git push origin master 后,图表将如下所示:

    remote: A -- B -- C -- X -- Y'
    local:  A -- B -- C -- X -- Y'
    

    现在您的协作者的提交在远程master 分支中完好无损。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 2013-06-10
      • 2021-06-26
      • 2018-11-29
      相关资源
      最近更新 更多