git fetch
git fetch
会从远程仓库中获取更改,并将其放入您的仓库对象数据库中。它还会获取远程仓库中的分支,并将它们存储为远程跟踪分支。
当您正在获取内容时,Git会告诉您每个获取的远程仓库分支存储在何处。例如,您可能会看到以下信息:
7987baa..2086e7b master -> origin/master
在获取时,'origin/master' 存储了 'master' 在 'origin' 仓库中的位置。
如果你查看 .git/config
文件,你会看到以下代码块:
[remote "origin"]
url = git://git.example.com/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
这意味着,来自原始远程仓库(你克隆的仓库)的任何分支 'A' ('refs/heads/A') 都将被保存为 'origin/A' ('refs/remotes/origin/A')。
git log ..origin/master
如你所见,'origin/master' 就是原远程仓库中的 'master'。 如果你在(默认的) 'master' 分支上,则 git log ..origin/master
,它等同于 git log HEAD..origin/master
,当在 'master' 分支上时等同于 git log master..origin/master
,将列出所有在远程仓库的 'master' 分支上但不在你本地工作的 'master' 分支上的提交记录。
现代 git 的更通用版本(假设存在 upstream / tracking 信息)将使用简单的
$ git log ..@{u}
(这里@{u}
是@{upstream}
的同义词,参见gitrevisions手册页)。
git merge origin/master
git merge
用于合并两行历史记录。如果其中一方自上次分支点(合并基础)以来没有进行任何工作,则情况要么是快进(您所在的分支简单地更新到正在合并的分支的末端),要么是最新的(没有新内容需要合并,您所在的分支保持不变)。
在'master'分支上时,执行git fetch
后跟git merge origin/master
相当于执行
$ git pull
如果你不想合并,那就不需要合并。请注意,如果你不喜欢
git pull
的结果,你可以使用
git reset --hard HEAD@{1}
回到之前的状态并丢弃它的结果。
git log ..@{u}
。 - Jakub Narębski