2015-11-04 27 views
0

git fetch后我如何获得git log的相同结果,如我在git pull之后获得的结果?Git获取后的Git记录

我克隆了两个相同的存储库。第一个为clone,第二个为--bare。一段时间后,我为第一个存储库执行了git pull,第二个执行了git fetch

如果我试图检查git log的存储库,我会得到不同的结果。

cd ~/first 
git pull 
git log --all --oneline | wc -l 
21962 

cd ~/second.git 
# second 
git fetch 
git log FETCH_HEAD --all --oneline | wc -l 
21903 
+0

你能详细说明这些日志之间的区别吗? – rodrigo

+0

为什么在第二个日志命令中指定FETCH_HEAD而不是使用相同的命令呢?你已经在使用'--all'了。 –

回答

1

正如你可以在文档中看到git pull,一个git pull实际上是一个git fetch后跟一个git merge。因此,当你pull,你的分支先进到HEAD,而当你fetch它不是。您需要在git fetch之后添加git merge以使git log结果相同。

+0

它不起作用。 'git merge'返回 '致命的:这个操作必须运行在工作树上' – Anton

+0

@Anton它工作。问题在于你正在一个“裸”的仓库中工作。参见[this](http://stackoverflow.com/questions/11931840/getting-fatal-this-operation-must-be-run-in-a-work-tree-on-bare-repository)。你不能在第二个仓库中运行'git pull',因为如果没有工作树,git不能执行'git merge'。 – houtanb

0

git fetch和git pull存在一点差异。

Git fetch用于从远程获取最新的内容,而Git pull用于获取远程的内容并将它们与您的分支合并。

Pull = fetch + Merge。

因此,正如你所说的抓取将只显示你的分支的日志,但是,与你的远程更改合并后,git pull将显示完整的日志。

希望它回答你的问题。

0

git-log手册页:

--all 
    Pretend as if all the refs in refs/ are listed on the command line as <commit>. 

使用--all,git的日志将考虑所有的头(当地的分支机构),远程分支机构和标签,并显示日志条目中是图形一切可从任何这些参考文献中获得。

如果你在两个回购站(和一个git pull意味着一个git fetch)上做了一个git fetch,那么这些东西中的一些应该已经在你的两个回购站之间保持一致:特别是远程分支和注释标签。

但是,其他事情可能不一致。未注释的标签可能不会在两者之间共享,并且本地分支可能会有所不同。

在您的第二个回购中,您正在使用--bare。根据定义,你在那里没有结账。这意味着你没有签出任何本地分支机构。您的第一个回购可能有非共享的本地分支(如主题或功能分支)。如果是这样,那么使用--all时可能会影响日志输出。

绦带也存储在refs/。与第二个回购的日志相比,第一个回购中的任何存储都会影响git日志。