gpt4 book ai didi

git - 使用远程分支时如何分支

转载 作者:行者123 更新时间:2023-12-02 09:04:25 25 4
gpt4 key购买 nike

我来自 Perforce,是 Git 新手。我有一个私有(private) gitlab 服务器并与一个团队合作。我了解 Git 的基本分支概念,但仍然很难找到同步分支时的默认工作流程。想象一下我有以下分支结构

$ git branch -a
master
remotes/origin/HEAD -> origin/master
remotes/origin/feature
remotes/origin/my-first-feature

my-first-feature 派生自 feature。当我现在在本地 checkout 分支时,我是否应该直接处理此本地副本并将其推回服务器上的此分支?或者我应该在本地创建另一个分支,该分支派生自 feature

$ git checkout my-first-feature
vi do-i-work-directly-here-and-push-back?

最佳答案

好吧,在 git 中,以不同的方式思考会更有用。

Git 并没有真正的分支。它所拥有的只是大量的提交,并且这些提交之间具有父子关系。一个提交也可能有两个父项( merge 时发生)。不确定是否有超过 2 个 parent ,还没有在实践中看到过。

git 中的“分支”实际上只是指向提交的指针。它们就像特定提交 ID 的人类可读别名。

但是,按照惯例,有很多命令会自动对它们进行操作。例如,当您向分支提交一些更改时,git 会创建一个新的提交,并将其父级设置为该分支当前指向的提交。然后它更新该分支以指向新的提交。

现在,当您克隆存储库时,git 不仅会复制所有提交,还会复制所有分支。但它没有保留他们的名字,而是将它们更改为 remotes/origin/<original name> 。这又只是一个约定 - 这些分支一点也不特殊,它们只是具有特定格式名称的分支。

现在,当您希望在本地使用这些分支之一时,传统要求您首先制作该分支的本地副本:git checkout -b my-first-feature --track remotes/origin/my-first-branch 。还有一个简写,您可以在文档中找到它。

它的作用是创建另一个本地分支,并使其指向与远程分支相同的提交。此外,它还在新的本地分支上做了一个注释,上面写着“这个本地分支正在跟踪那个远程分支”。当你推和 pull 时,这才有意义,我们稍后会讨论这一点。请注意,这仍然是本地操作。 Git 没有联系远程存储库以查看其 my-first-branch 在哪里正在指向。它只是检查本地 remotes/origin/my-first-branch分支。

现在您有了一个新的本地分支,您可以根据需要使用它。

当你进行推送操作时,git会连接到远程存储库并尝试使远程my-first-branch指向与本地 my-first-branch 相同的提交。为此,它会上传所有新提交并尝试更新远程分支指针。如果服务器上有新的提交(在 my-first-branch 中),它将拒绝。它通过检查本地 my-first-branch 是否有提交来检测这一点。指向的是远程 my-first-branch 提交的后代正在指向。如果不是,你就无法 push 。然后你需要执行一个 pull 操作来获取所有新的提交,更新你的本地 remotes/origin/my-first-branch匹配服务器的,然后 merge my-first-commitremotes/origin/my-first-commit 。这会产生一个新的提交,它是远程 my-first-branch 的后代。 。现在就可以成功推送了。

还有其他方法可以处理提交,但是如果您从提交而不是分支的角度来思考,那么理解这一切会更容易。分支只是为了方便起见的别名。提交图才是最重要的。

关于git - 使用远程分支时如何分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60177481/

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