gpt4 book ai didi

git - 将分支和子分支 merge 回 master

转载 作者:行者123 更新时间:2023-12-05 08:55:16 29 4
gpt4 key购买 nike

我对 git 的了解有限。

我已经从 master 创建了一个分支 B1,进行了一些编辑并提交到这个分支。

我想从 B1 创建另一个分支 B2,我在 B2 中进行了一些编辑

而且我还想提交 B2(包含 B2 和 B1 的编辑)并将其推送回 master

我该怎么做,文档假定您总是从 master 创建一个分支,而不是另一个分支。我为我的 git 愚蠢道歉。

最佳答案

tayfun 的回答基本上是正确的。如果您想了解更多有关原因的概念背景:

文档不应该对从 master 分支做出假设(至少如果你正在查看规范的 git 文档时不应该这样做;显然我不知道你在看什么文档)。示例通常可能从 master 开始,只是因为它们是简单的示例,但要理解的是:

master 没有什么特别的。

一个分支就是一个分支;其中一个刚好最先出现,按照惯例,它被称为 master

此外,git 没有“父分支”或类似内容的内存。在任何给定时间,您都可以专注于当前的提交拓扑。所以:

I have created a branch B1 from master, made some edits and committed to this branch.

x -- O <--(master)
\
A <--(B1)

I want to create another branch B2 from B1, I make some edits in B2

x -- O <--(master)
\
A <--(B1)
\
B <--(B2)

此时,git 不知道也不关心 B2 是“从 B1 创建的”。您可以不执行上述步骤,而是说:

  • 从 master 创建 B2
  • 进行一些更改并提交(创建A)
  • 进行一些更改并提交(创建 B)
  • 回到A并创建分支B1

一切都会一样。

And I also want to commit and push B2 (with edits from B2 and B1) back to master

这里你的术语很困惑。

push 是更新远程仓库 ref。通常,您的 Remote 可能有一个分支对应于每个本地分支。尽管 git 非常灵活并且您可以以不同的方式使用 push,但它似乎仍然不是您在这里的意思。

将一个本地分支的更改 merge 到另一个本地分支就是 merge 。 (实际上有几种方法可以解决这个问题,但从概念上讲,最直接的方法是 merge ...)

另外,这涉及到一个关于 git 中分支的常见误解——即更改“属于”这个分支或那个分支。在许多源代码控制系统中这可能是正确的,但在 git 中却不是。相反,一个变化要么是,要么不是,从一个分支(或其他引用)“可达”;并且可以(通常)从许多引用文献中获得更改。

(本质上,分支(或其他引用)是指向提交的指针;可以从引用访问该提交。如果该提交有父提交,则可以访问父提交。这通过父指针递归地继续,因此从该 ref 可以访问导致 ref 的整个历史。)

回到图表

x -- O <--(master)
\
A <--(B1)
\
B <--(B2)

您所描述的是 AB 应该 merge 到 master。因为 AB 正是可以从 B2 到达但不能从 master 到达的提交,这就像简单如

git checkout master
git merge B2

请注意,默认情况下,git 会在此处采取快捷方式,执行“快进”而不是真正的 merge 。这是可以做到的,因为 master 没有无法从 B2 访问的更改。在这种情况下,git 可以更新 master 以将其移动到与 B2 相同的提交。

x -- O -- A <--(B1)
\
B <--(B2)(master)

你可能不希望 git 这样做。 (一些分支/merge 策略要求保留分支拓扑。)在那种情况下你可以说

git checkout master
git merge --no-ff B2

这会给你

x -- O --------------- M <--(master)
\ /
A <--(B1) /
\ /
B --------/
^
(B2)

其中 M 是“merge 提交”。如果有其他更改可从 master 访问但无法从 B2 访问,则 merge 提交会将这些更改与来自 AB 的更改 merge

无论哪种方式,B1 仍然指向 A 并且 B2 仍然指向 B,所以它们都是完全可以从 master 访问。

关于git - 将分支和子分支 merge 回 master,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46667800/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com