我正在与一些合作者合作开展一个项目,每个合作者都有一个主分支的远程副本,这个副本可能与原始主分支最新或不同。
假设其中一个协作者由于提交X
而具有过期副本,则提交一些Y
并尝试将其推送到原始分支。它失败了,协作者合并了更改并再次推送,这次成功。
现在,在查看存储库的历史记录时,无法再找到提交X
,除了它的更改现在位于另一个名为Merge branch 'master' of https://....
的提交中。
这是git的正常行为吗?这使得难以追踪变化。有什么办法可以避免这个问题吗?
提前致谢!
答案 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');
分支中显示为完整。