Git 从自身从master分支的branchA分支是否与从master分支相同,然后合并从master的另一个分支进行的更改?

Git 从自身从master分支的branchA分支是否与从master分支相同,然后合并从master的另一个分支进行的更改?,git,github,version-control,Git,Github,Version Control,场景1: 我们有师父 git签出-b branchA(从master分支) git签出-b branchB(从branchA分支) 布兰卡被合并了 git签出分支 git拉入原始主机(将主机更改拉入branchB) //这是最终状态 场景2: 我们有师父 git签出-b branchA(从master分支) git签出主机 git签出-b分支HB(从主分支) git拉入原点branchA(拉入branchA变为branchB) 布兰卡合并成了主人 git拉源主机 //结束状态 这两种情况

场景1:

  • 我们有师父
  • git签出-b branchA(从master分支)
  • git签出-b branchB(从branchA分支)
  • 布兰卡被合并了
  • git签出分支
  • git拉入原始主机(将主机更改拉入branchB)
  • //这是最终状态
场景2:

  • 我们有师父
  • git签出-b branchA(从master分支)
  • git签出主机
  • git签出-b分支HB(从主分支)
  • git拉入原点branchA(拉入branchA变为branchB)
  • 布兰卡合并成了主人
  • git拉源主机
  • //结束状态

这两种情况相同吗?

您不是从分支进行分支,而是从分支所指的提交进行分支。如果master和branchA引用相同的commit,我们称之为ABC123,那么所有这些都是相同的

git branch branchB master
git branch branchB branchA
git branch branchB ABC123
在所有情况下,branchB都将指向commit ABC123。从那时起,大师或布兰卡身上发生的事情对布兰卡没有影响

例如

A - B [master]

$ git branch branchA
$ git branch branchB

A - B [master]
      [branchA]
      [branchB]
所有三个分支都指向提交B

如果我们签出branchA并做出一些承诺

$ git checkout branchA
$ ...git commit...
$ ...git commit...

      C - D [branchA]
     /
A - B [master]
      [branchB]
$ git checkout branchB
$ ...git commit...
$ ...git commit...

      C - D [branchA]
     /
A - B [master]
     \
      E - F [branchB]
师父和布兰卡留在了commit B。布兰卡自己走了。如果我们签出branchB并做出一些承诺

$ git checkout branchA
$ ...git commit...
$ ...git commit...

      C - D [branchA]
     /
A - B [master]
      [branchB]
$ git checkout branchB
$ ...git commit...
$ ...git commit...

      C - D [branchA]
     /
A - B [master]
     \
      E - F [branchB]
现在branchB自行启动。如果我们对师父也这么做

$ git checkout master
$ ...git commit...
$ ...git commit...

      C - D [branchA]
     /
A - B - G - H [master]
     \
      E - F [branchB]
主人自己走了


因为这是不正确的,所以您的场景的其余部分很混乱

git pull origin master (master changes pulled into branchB)
这会将更改从原点/主控形状拉到另一个主控形状


如果要将origin/master拉入branchB,可以使用git-pull-origin-master:branchB。完整语法为
git pull+:
。这通常用作git pull源主机-不会将更改拉入分支B。它只会使用来自远程源的更改更新本地主机。由于您没有做任何更改,并且如果远程回购中没有更改,那么多次分支和合并将不会更改状态。所有分支仍将指向最后一次提交。您从未向任何分支提交任何内容。这是故意的吗?你的描述太混乱了。分支不是从另一个分支创建的,分支是基于提交的,分支只是指向提交的指针。你最好从中学习基本的git概念。你说“branchA被合并”是什么意思。在场景1中?通过说“git pull origin branchA in Scenario 2”,你似乎也误解了pull和merge的概念,实际上这是一个合并操作。由于场景2中的分支A和分支B指向相同的提交,因此不需要执行合并操作。最后,git-pull不是一个好习惯,git-fetch首先检查更改,然后决定使用git-merge或git-rebase是一个更好的操作。