GIT 在创建新分支时将哪个分支视为源分支?

Posted

技术标签:

【中文标题】GIT 在创建新分支时将哪个分支视为源分支?【英文标题】:What branch GIT considers as source branch while creating new branch? 【发布时间】:2018-10-22 23:03:26 【问题描述】:

我是 GIT 新手,正处于 GIT 概念的学习阶段。我有两个简单快速的问题。

第一季度。每当我们想创建一个新分支时,我们输入以下命令:

git checkout -b BranchName

在这里,我的问题是git checkout 在创建新分支时考虑哪个分支作为它的源分支?

是否将master 分支视为源分支? 是否将当前分支视为源分支?

第二季度。假设,它正在考虑作为源分支的任何分支都不是最新的远程。因此,在从该源分支创建一个新分支时,它是否会为源分支创建一个拉取然后创建新分支,或者它认为本地分支是它的基础并且不从服务器拉取任何东西?

【问题讨论】:

您将从当前分支创建一个分支,如果它不是最新的,您的新分支也不会有任何新提交。所以首先在您当前的分支上git pull - 然后创建一个新分支。 好的..所以这意味着源分支将是我当前的分支,最佳实践是首先拉出您当前的分支然后创建新分支。但我没有明白你的意思“如果它不是最新的,你的新分支也不会有任何新的提交”。你能解释一下吗? 假设您的分支 A 具有提交 #1、#2、#3(虚构哈希)。这是您当地的分支机构。您的团队成员添加新内容并推送到遥控器。这将是提交 #4。在git pull 之前,您的本地分支中没有它。因此,如果您创建一个新分支B 并且不首先在 A 上执行 git pull,那么您将不会在 B 中获得最新更改(#4),因为您的本地 A 将用作源并且它不是最新的遥控器。这有意义吗?) 哦...多好的解释@john...非常感谢...:) 你认为“源分支”是什么意思?它在 Git 中没有任何意义。 【参考方案1】:

没有源分支的概念。分支就是我们所说的“ref”,指向提交的指针。

因此,当您创建分支时,该分支指向您所在的提交(或间接指向您所在的当前分支指向的第一个提交)。

如果您没有通过 has 或 refspec 指定特定提交,git 将使用您可以通过命令获得的以下哈希在提交上创建分支:

git rev-parse HEAD

【讨论】:

【参考方案2】:

它会将你当前的分支视为源或使用另外一个 arg:

git checkout -b BranchName StartPoint

注意:下面我回答Q2:

如果起点不是最新的并且您没有在本地提交任何内容,您可以拉取,否则您可以重新设置它(或者您可以合并,仍然使用拉取)。 git fetch --all 从远程刷新历史记录 你可能落后了一些提交。然后git rebase origin/master(或任何分支)更新它并将你的提交放在首位。

【讨论】:

Fetch != pull != rebase. 首先你必须获取。为了从远程检索历史记录。然后你必须变基,以便通过添加你最终从远程错过的提交来更新并将你的添加到顶部。最后你可以变基。 你也可以在没有变基的情况下拉取:***.com/q/18930527. 感谢您回答我的第一个问题。其次,我认为最好的做法是先拉出分支以使其保持最新状态,然后再创建一个新分支。 好吧,当你自己并没有真正在本地提交任何东西时,你就拉了。

以上是关于GIT 在创建新分支时将哪个分支视为源分支?的主要内容,如果未能解决你的问题,请参考以下文章

查看git分支从哪个源分支创建的

查看git分支从哪个源分支创建的

Git:分支管理

如何干净地合并包含 revert 的分支(包含 revert 的分支将 revert 视为新更改)

git branch 分支和分支合并

Azure DevOps - 拉取请求 Git “后续步骤:手动解决这些冲突并将新更改推送到源分支。”