理解git fetch然后合并

来自svn背景,我有这个问题:

相当于svn status -u的git

svn status -u的git相当于什么)

而我明白,你这样做:

 git fetch git log ..origin/master 

但是,我猜的origin/master部分取决于分支? 如果我跟踪远程分支,这不一定是主人?

我也不明白git merge origin/master 。 我猜测,这只是意味着git fetch从远程git fetch更改,并将它们作为原点/主数据放入git数据库系统中,而我只是在高手? 如果我提取了更改,请检查做了什么,被更改吓坏了,不想合并? 我如何基本放弃他们?

git fetch

git fetch从远程仓库git fetch更改,并将其放入仓库的对象数据库中。 它还从远程存储库提取分支,并将它们存储为远程跟踪分支

当你提取git时,它告诉你它在哪里存储远程仓库中的每个分支。 例如,你应该看到类似的东西

  7987baa..2086e7b master -> origin/master 

提取时。 这意味着'origin / master'存储'master'在'origin'仓库中的位置。

如果您检查.git/config文件,您将看到以下片段:

 [远程“起源”]
         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

正如你所看到的'起源/主'是起源'主'。 如果你在(默认)'master'分支,那么git log ..origin/master ,相当于git log HEAD..origin/master ,这在'master'分支上就等于git log master..origin/master将列出远程存储库中“master”分支上的所有提交,并且不在您工作的本地“主”分支中。

现代git中的更通用的版本(假设上游/跟踪信息存在)将被简单地使用

 $ git log ..@{u} 

(这里@{u}@{upstream}同义词,参见gitrevisions manpage)。

混帐起源/主人

git merge用于连接两行历史logging。 如果其中一方自上一个分支点以来没有做任何工作(因为合并基础),则情况要么是快进 (您所在的分支只是更新到您正在合并的分支的顶端) (没有什么新的合并,你所在的分支保持不变)。

git fetch之后是git merge origin/master ,当在'master'分支上时,相当于发行

 $ git pull 

如果你不想合并,你不需要。 请注意,您可以使用例如git reset --hard HEAD@{1}返回并放弃git pull结果,如果您不喜欢的话。

git fetch下载代表给定远程分支所需的所有更改。 通常这是origin/master或类似的。

通过创build新的提交或快速转发(或组合), git merge将两个分支git merge在一起。 它不会改变你所做的任何提交,你总是可以回滚到你的旧分支(使用git resetgit checkout )。

注意, git pullgit fetch然后是git merge (或者如果给出--rebasegit rebase )。