`gitmergeorigin`有什么作用?

今天有人问我做什么git merge origin

我说:你是说,git merge origin/branch

他们:不,只是git merge origin

所以我试了一下,我不知道它有什么作用。

让我们比较一下git pull origin获取当前分支的尝试:

$ git pull origin
You asked to pull from the remote 'origin', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.

公平,那么呢git merge origin

$ git merge origin
Auto-merging ...
Merge made by the 'recursive' strategy.
 ...
 1 file changed, 1 insertion(+), 1 deletion(-)

嗯?刚刚发生了什么?

$ git log -n 2
commit ec0fe8f2fd20064db34f9379d30b841c692cfced (HEAD -> test2)
Merge: 982c831 ec3393e
Author: Me
Date:   Fri Nov 27 11:14:34 2020 +0800

    Merge remote-tracking branch 'origin' into test2

commit 982c83128f7f77fb187fa85c930a6d11bbfde735 (origin/feature/recon, feature/recon)
Author: Me
Date:   Fri Nov 27 10:43:20 2020 +0800

    lint errors

? 那不是师父说的。

$ git branch -vv
  feature/azure-data                81481f5 [origin/feature/azure-data] fix lint errors
  feature/recon                     982c831 [feature/recon] lint errors <--- !!!
  master                            ec3393e [origin/master] Merged in feature/backfill (pull request #42)
  test2                             ec0fe8f Merge remote-tracking branch 'origin' into test2

什么?为什么feature/recon我跑的时候被合并了git merge origin

好的,所以我创建了 test2 出来feature/recon,如果我在 master 上做呢?

$ git checkout master
$ git checkout HEAD~5
$ git switch -c test6
$ git merge origin
...
$ git branch -vv
* test6                             ec3393e Merged in feature/backfill (pull request #42)

那么...将当前的父分支合并到这个分支?

我看到一些模糊的手波浪形答案git merge origin相当于git merge origin/HEAD,但是......这是什么意思?每个遥控器都链接到某种 HEAD ref 吗?

这是怎么回事?

注意:据我所知,这不是重复的,因为其他问题正在询问git merge remote/branch各种组合中的作用。我得到它; 这不是我在这里问的问题。

回答

我看到一些模糊的手波浪答案git merge origin相当于git merge origin/HEAD......

他们(通常)是正确的。

为了消除模糊性,请查阅文档,特别是 gitrevisions 的文档。请注意将字符串解析为提交哈希 ID 的六步过程:

<refname>, eg, master , head/master , refs/heads/master
      一个符号引用名。例如master通常表示refs/heads/master引用的提交对象。...通过采用以下规则中的第一个匹配项来消除<refname>的歧义:

  1. 如果$GIT_DIR/<refname>存在,那就是你的意思(这通常只对HEAD, FETCH_HEAD, ORIG_HEAD,MERGE_HEAD和有用CHERRY_PICK_HEAD);

       ...

  1. 否则,refs/remotes/<refname>/HEAD如果存在。

现在,假设origin/HEAD存在。这是 的缩写refs/remotes/origin/HEAD。假设我们要求 Git 解析 name origin。然后,如果步骤 1、2、3、4 和 5 无法解析origin/HEAD为原始哈希 ID,我们将到达步骤 6。我们刚才说refs/remotes/origin/HEAD确实存在。如果它可以解析为哈希 ID,则这就是git merge将使用的哈希 ID 。

每个遥控器都链接到某种 HEAD ref 吗?

如果origin/HEAD存在,它通常是一个符号 ref,就像HEAD通常是一个符号 ref 一样。运行git branch -rgit branch -a以列出远程跟踪名称,包括origin/HEAD它是否存在。请注意,这里有个古怪,有点不对称的:git branch没有列出象征裁判HEAD,但git branch -r还是git branch -a 列表中的每个远程跟踪象征-REF HEAD

git clone命令origin/HEAD最初创建符号引用,该git remote命令可用于更新它,或者如果您不喜欢它,则可以删除它。如果您确实删除了它,git merge origin将无法解析origin为哈希 ID,并会告诉您它originnot something we can merge.


以上是`gitmergeorigin`有什么作用?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>