' git merge'有什么区别?并且' git fetch'? 我对这两个命令有一些问题。 我不知道何时应该使用其中一种。
答案 0 :(得分:2)
更新 - 好悲伤,我的合并图一直都是错的。合并不会移动"其他"分支机构的参考...
git fetch
是关于从远程存储库中检索数据。
git merge
是关于结合多个工作线(通常是本地分支机构,但见下文)的工作。
git pull
(我知道您没有询问pull
但是请耐心等待我)是一种从远程检索数据的简写,如fetch
,然后是{{1}从您的当前分支到远程的相应工作线(如果有的话;"跟踪信息"确定这一点。)
例如,假设您有一个包含5个提交的单个分支(merge
)的远程仓库。
master
前一段时间你克隆了这个回购;当时只有第一次提交('origin' repo
A --- B --- C --- D --- E <--(master)
)。然后,您创建了一个新分支(A
)并做了一些工作,在该分支上创建了一个新的提交(branch1
)。最后,你从遥控器中取出了变化;更多关于以后的工作原理,但现在让我们更新您的L
以包含master
。
B
请注意,除了本地分支引用(local repo
A --- B <--(master)(origin/master)
\
L <-- (branch1)
和master
)之外,您还有一个远程分支引用(branch1
),目前恰好与{ {1}}。
现在,如果你想更新你的本地仓库以包含来自原产地的所有数据,但没有合并任何东西,你会说
origin/master
然后你有
master
这是一次获取 - 只需从遥控器获取数据。
您明确要求git fetch
的主要原因是将 C --- D --- E <--(origin/master)
/
A --- B <--(master)
\
L <-- (branch1)
的工作与merge
合并。所以
branch1
(然后可能解决任何冲突)你现在有了
master
(在某些情况下 - 只有一个分支包含不在另一个分支中的变化 - 合并可以通过&#34;快进&#34;;但不适用这里因为每个分支都有变化 - 即分支有分歧。另外还有另一种称为 rebasing 的技术,它有时可以用来组合分支;但是那个&#39另一种蠕虫......)
这就是git checkout master
git merge branch1
和 C --- D --- E <--(origin/master)
/
A --- B --- M <--(master)
\ /
L ------- <--(branch1)
之间的区别 - 执行不同操作的非常不同的操作。但我也提到fetch
哪种结合了两者。如果您执行merge
,首先它会从远程执行更改(如果您没有使用pull
完全更新),然后如果当前分支具有相应的远程分支,则会合并它们。
pull
给出类似
的内容fetch
(请注意,虽然我通常绘制这些图表,以便&#34;直线&#34;进入合并是&#34;第一个父亲&#34;,在这种情况下这对# still on master
git pull
来说很麻烦;但这确实显示了一般的提交拓扑......)
当我谈到&#34;拉动变化&#34;要将 C --- D --- E --- N <--(master)(origin/master)
/ /
A --- B --------------- M
\ /
L ------------------- <--(branch1)
放入您的本地仓库,可能会使用N
答案 1 :(得分:1)
git fetch
将下载源树以检查更改,git merge
将您当前的分支与另一个分支连接。