git pull . master 和 git merge master 的区别是什么?

26

没有远程仓库,只有一个本地仓库,其中包含两个分支。

$ git branch -a
  master
* devel

在这个情境中,下列命令是同义词吗?

$ git pull . master

$ git merge master

更新:

$ git help pull 提供以下信息

SYNOPSIS
   git pull <options> <repository> <refspec>...

DESCRIPTION
   ...
   Note that you can use . (current directory) as the <repository> to pull
   from the local repository — this is useful when merging local branches
   into the current branch.

实际上,我不明白为什么在这个手册中提到这个有用。


2
没有 git-merge - 将两个或多个开发历史记录合并在一起。而 git-pull - 从另一个存储库或本地分支获取并合并。 - cptnk
3个回答

21

pull是由fetchmerge组成的命令。使用默认或合理的参数时,它将同步您当前的分支。

在问题中的参数下,它的大部分工作被破坏了。fetch部分被覆盖以使用当前的repo,所以被跳过了,并且您明确要求master覆盖FETCH_HEAD。

因此,在这种形式下,我认为它们是相同的(我也会把第一个放在无意义的类别中)。


无论如何,因为远程是'.',所以结果都将是相同的,不是吗? - John Szakmeister
1
正如我所指出的,没有远程存储库。因此,“fetch”没有做任何事情。您能否调整您的答案;我很高兴提到通常git pull等同于git fetch&git merge。 - Hotschke

16

git pull . master 会从当前仓库获取最新的内容(无操作),然后通过一些操作来使当前分支与master分支同步更新。这个操作可能是合并(merge),也可能是变基(rebase),具体取决于pull.rebasebranch.master.rebase等配置设置。

当使用合并(merge)时,合并策略可能受到pull.twohead的影响。

git merge master总是使用默认的合并策略来将master分支合并到当前分支。


5
在第二种情况(git merge master)中,唯一的区别是它将合并不是最新数据,而是从您上次远程更新后的数据。因此,如果您只是进行了fetch(或git remote update) - 它们的工作方式相同,但如果您很久以前更新了本地仓库 - 它将与旧快照合并。
不确定git pull . master中的句点是否为正确语法...

它让我感到困惑,但似乎跳过了获取部分并且能够工作。 - Balog Pal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接