如果我创建一个新分支,则从复制的分支中提交的所有提交都将被新建一个提交。
我怎么能阻止这个?我想在新的分支机构中进行新的提交..
答案 0 :(得分:2)
git中的提交包含对其父提交的引用。这就是git如何构建存储库的历史记录。
另一方面,分支只指向特定的提交。 字面上一个包含当前提交的SHA-1密钥的文件。您可以在存储库的.git/refs/heads
文件夹中找到它们。
当您创建新分支而未指定提交时,分支将指向当前指向的同一提交HEAD
。 (请注意,HEAD
并不直接指向提交但指向分支,但这是一个不同的故事。)
假设您当前在development
分支机构,并希望创建一个新分支来处理新功能。
git checkout -b new-branch
现在,development
和new-branch
都指向同一个提交,假设密钥为DEF456
。这个提交包含对它的父提交的引用 - 就像每个提交一样 - 它是ABC123
,而git merge --no-ff <branch-to-merge>
又包含对它的父提交的引用,依此类推。
你知道,git在创建新分支时不会复制分支的历史记录,它只是指向与当前分支相同的提交。
如果您想了解更多关于git如何在内部存储信息的信息,您可以查看Git Objects chapter的gitpro book。
正如您在this question中找到的那样。您可以使用{{1}}强制进行合并提交,而不是快进。
合并提交是特殊的,因为它在父提交中不包含一个refence,因为大多数提交在git do中,但它包含对它的父提交的多个引用。这定义了合并。
答案 1 :(得分:2)
听起来你真的在问强迫&#34;真实&#34;合并而不是&#34;快进&#34;合并,以及&#34;壁球&#34;合并(根本不是实际的合并)。但是,为了完整起见,我想提一下,在创建新的分支名称时还可以做一件事:
git checkout --orphan -b newbr
在这种情况下,git会让您newbr
,而不会实际创建newbr
。这意味着 next 提交将在您的存储库中启动一个新的独立提交图。换句话说,您将拥有多个&#34; root提交&#34;在单个存储库中(根提交是具有 no 父级的提交,与具有一个父级的普通提交和具有两个或更多父级的合并提交)。
存储库中的多个独立提交图是不寻常的,但是受到支持:例如,git自己的源存储库包含它们。 (使用git维护git程序。)