合并后Git提交消失

时间:2016-01-06 11:06:12

标签: git github version-control merge

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

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

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

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

保留历史记录的一个选项是改为使用master。在rebase中,您的协作者将首先从远程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提交略有修改。现在,您的协作者处于令人羡慕的位置,能够将他的工作直接推送到远程git push origin master分支。从master分支执行remote: A -- B -- C -- X -- Y' local: A -- B -- C -- X -- Y' 后,图表如下所示:

master

现在,您的协作者提交在远程 CREATE TABLE WEEK AS WITH generator AS ( SELECT DATE '2015-01-02' + LEVEL - 1 dt FROM dual CONNECT BY LEVEL <= DATE '2016-01-21' - DATE '2015-01-02' + 1 ) SELECT to_char(dt, 'YYYY "SEM"IW') "KEY", dt "DATE_START", least(next_day(dt - 1, to_char(DATE '2015-01-08', 'DAY')), last_day(dt)) "DATE_END" FROM generator WHERE to_char(dt, 'D') = to_char(DATE '2015-01-02', 'D'); 分支中显示为完整。