我的问题是,是否可以引用功能分支B中的分支a中所做的更改,而不存在重复提交或阶段性更改?
然后,当您将这个分支B合并到A中时,git会识别出这个引用的提交已经在A上了,并且什么也不做。有命令吗?
我知道cherry-pick
、rebase
和merge
,但这些命令并不能解决这个问题。
我甚至不知道git架构是否可行,所以我感谢所有能帮助我的人。
除了一些小的例外,Git中的所有都是Git中提交的集合。历史是提交;提交是历史;仅此而已。
这意味着对你的问题的直接回答——一旦有人将其重塑为适合Git的答案,那就是;在你指的这个词的意义上没有任何分支,甚至没有任何更改,因为提交是快照——是";否";。您所能做的就是进行另一次提交,或者多个额外的提交,以添加新的保存状态。
次要的例外包括分支名称:每个名称存储一个哈希ID,我们从中查找所有其他提交。这形成了一个图,特别是一个有向非循环图,分支和其他名称作为其他自包含图的入口点。这就是我们在存储库中查找提交的方式。
在某种程度上,存储库中存在文件,它们的存在只是因为它们包含在提交中。每个提交都有一个每个文件的完整快照(尽管存储在一个奇怪的、Git化的、消除重复的形式中,所以共享同一文件的提交实际上是共享文件的:它在所有的提交中,但一切都是用一层间接共享来完成的(。因此,名称查找特定的提交,而这些提交查找其他提交和包含的文件。
当你使用git merge
时,你会得到:
- 一个真正的合并:一个添加到图中的新提交(添加更多历史:它与前一个提交的向后链接是与前两个提交的链接的对(,或者
- 什么都没有:一个假的快进合并,只移动一个分支名称;或
- a";挤压合并";通过
git merge --squash
:Git执行与实际合并相同的工作,但随后停止并让您进行新的提交。新的提交不会链接到两个提交
所以只有在假情况下——这实际上只是";移动分支名称"--您没有添加任何提交;在一个特殊情况下,你可以用这个来回答你的问题;是的";。在这种情况下,两个分支名称都选择了相同的提交;一次提交具有正确的快照,并向后连接到所需的先前提交,这样就足够了。但除此之外,您将不得不添加一个提交。