理解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 reset
或git checkout
)。
注意, git pull
是git fetch
然后是git merge
(或者如果给出--rebase
则git rebase
)。