Git 如何在不破坏分支请求关系的情况下选择提交?
Cherry picking提交创建具有相同内容的新提交。如果我通过Git 如何在不破坏分支请求关系的情况下选择提交?,git,azure-devops,Git,Azure Devops,Cherry picking提交创建具有相同内容的新提交。如果我通过dev to test分支将cherry pick从dev分支转移到test分支,那么我cherry pick的提交将包括在下一个从dev分支到test分支的pull请求中,即使它们的内容已经添加到测试分支中 例如: 当前提交存在于分支中: dev: a-b-c-d-e-f test: a-b-c 然后我选择樱桃并快进: dev: a-b-c-d-e-f test: a-b-c-g(conten
dev to test
分支将cherry pick从dev
分支转移到test
分支,那么我cherry pick的提交将包括在下一个从dev
分支到test
分支的pull请求中,即使它们的内容已经添加到测试分支中
例如:
当前提交存在于分支中:
dev: a-b-c-d-e-f
test: a-b-c
然后我选择樱桃并快进:
dev: a-b-c-d-e-f
test: a-b-c-g(content of e)-h(content of f)
然后将新的提交添加到dev:
dev: a-b-c-d-e-f-i
我想实现三件事:
d-i
李>
测试:a-b-c-g-h-d-i
李>
e-f
通过历史dev: a-b-c-d-e-f-i
test \g-h
通常从开发人员向测试人员发送PR,然后合并:
dev: a-b-c-d-e-f-i
test \g-h----\j # j = h+i
下面是我将如何描述合并后的测试分支
test: a-b-c-g-h-j
作为关系,因为r(j)=r(h)+r(i)
是第一个父母j
和第二个父母h
的孩子李>i
从文件内容开始,c(j)=c(d)+c(i)
表示文件内容状态,当与j
的差异时,将等于与h
+c
与i
的差异f
现在,许多GitGUI软件决定以线性列表的方式显示内容,通常按逆时间顺序显示,如
dev: a-b-c-d-e-f-----i
test \------g-h--\j
|
V # visually merged down to
a-b-c-d-e-f.g.h.i-j
这种表示形式在视觉上只是线性的,并不意味着这些提交是线性连接的。因此,您看到的是来自多个分支的提交的线性列表,而不仅仅是示例中的test
分支test
自己的历史很好,只有g-h
,而不是e-f
如果您确实希望只显示一对g-h
或e-f
,那么,由于这是repo中所有分支的提交列表,因此需要从repo中删除其中一对。换句话说,您需要重写dev
或test
分支的历史记录
两个git命令可以执行这样的重写,
reset
,rebase
,filter branch
对于第2点,如何定义“look like”?根据我的观点,简单地做一个普通的公关会给你一个“看起来像”你所描述的结果。这个结果有什么问题?如果您错误地认为有两个额外的文件副本,好像它浪费了一些磁盘存储,那么rest保证它不会。在提交中以指针的形式跟踪文件。@hackape我想避免此版本的历史记录:test:a-b-c-g-h-d-e-f-I
。当我执行拉取请求时,它特别显示了内容已经合并的提交。混乱的历史和像这样混乱的请求是我试图避免的。我很清楚这不会创建重复的文件。我仍然不明白你认为正常合并有什么错。它造成了什么混乱我刚刚创建了一个分支来测试这个。这是一本书。以红色突出显示内容已被cherrypick合并的提交。然后我从源分支发出了一个pull请求。用橘子采摘的樱桃。红色是来自PR的提交,它们没有关联的更改,它们复制了以前的提交消息。这里有两个问题:1)请求细节显示这些提交。2) 历史记录有两个空提交,其中包含与其他提交相同的消息。@Nomenator但您不能简单地说此类提交历史记录属于test
分支,也不能暗示a-b-c
链接关系。你给我看一些图形用户界面的屏幕截图。该软件决定如何以线性顺序列出这些提交,但不一定说,这样的提交可以从CLI中test
@Nomenator的当前ref进行线性跟踪,如果键入git rev list--first parent test
,您会看到不同的结果thing@Nomenator现在,如果您真的希望在屏幕截图GUI中只显示e-f
或g-h
对中的一个,那么必须重新编写分支dev
或test
,以便从其历史记录中删除2个提交。你想要吗?我明白了。谢谢你的解释。这只是两个拉请求,一个包含前两个提交,第二个如屏幕截图所示。我不确定Azure是否就是这样处理拉取请求的,这让它与众不同。不管是哪种方式,您的指导都非常有用,我深入了解了git存储库的结构,我将致力于改进项目的分支策略,以保持历史记录的整洁。