[英]understanding git fetch then merge
来自svn背景,我有这个问题:
(什么是svn status -u
的git等价物)
我明白,你这样做:
git fetch
git log ..origin/master
但是,我猜测origin/master
部分取决于分支? 如果我跟踪远程分支,它不一定是主人吗?
我也不完全理解git merge origin/master
。 我猜这只是意味着git fetch
抓住了远程的变化并将它们作为origin / master放入git数据库系统中,我只是掌握了? 如果我获取更改,检查已完成的内容,是否因更改而感到恐惧并且不想合并,该怎么办? 我怎么基本上放弃他们?
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') 。
正如你所看到的,'origin / master'是'master'的起源。 如果你在(默认)'master'分支,那么git log ..origin/master
,相当于git log HEAD..origin/master
,当'master'分支上相当于git log master..origin/master
将列出远程存储库中“master”分支上的所有提交,而不是在您执行工作的本地“master”分支中。
现代git中更通用的版本(假设存在上游/跟踪信息)将简单地使用
$ git log ..@{u}
(这里@{u}
是@{upstream}
同义词,请参阅gitrevisions手册页。
git merge
用于连接两行历史记录。 如果其中一方自上次分支点以来没有做任何工作(自合并基础以来),情况要么是快进的 (你所在的分支只是更新到你正在合并的分支的尖端),或者向上 -到目前为止 (合并没有新东西,你所在的分支保持不变)。
git fetch
后跟git merge origin/master
,当'master'分支时,相当于发布
$ git pull
如果您不想合并,则不需要。 请注意,如果您不喜欢,可以使用例如git reset --hard HEAD@{1}
返回并丢弃git pull
结果。
git fetch
下载代表给定远程分支所需的所有更改。 通常这是origin/master
或类似的。
git merge
通过创建新提交或快进(或组合)将两个分支git merge
在一起。 它不会更改您所做的任何提交,并且您可以随时回滚到旧分支(使用git reset
或git checkout
)。
请注意, git pull
是git fetch
然后是git merge
(如果给出了--rebase
则为git rebase
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.