2.本地与git 远程分支的差集 :(显示git 远程分支有而本地没有的commit信息)
git 远程分支引用是对git 远程分支倉库的引用包括分支、标签等等。
的Git服务器 如果你从这里克隆,Git 的 clone 命令会为你自动将其命名为 origin拉取它的所有数据,创建一个指向它嘚 master 分支的指针并且在本地将其命名为 origin/master。 Git 也会给你一个与 origin 的 master分支在指向同一个地方的本地 master 分支这样你就有工作的基础。
如果你向远端推送了一个分支dev那么远端会产生dev分支,在本地对应的会有一个指向远端分支的origin/dev指针也就是git 远程分支跟踪分支。
如下图所示git 远程分支仓库有一个分支称作为master,其在本地仓库对应着一个git 远程分支跟踪分支origin/master,同时本地还有一个称作为master的本地分支
当你在本地master上做了一些提交操作之后,同时其他同事提交了更新到git 远程分支分支master这时候git 远程分支分支与本地分支的情况可能会出现如下情况:
可以发现,git 遠程分支跟踪分支origin/master并没有发生移动本地master和git 远程分支仓库master朝着不同的方向在发展。也就是说只要你不与git 远程分支仓库进行连接,git 远程分支跟踪分支就不会发生变化
现在git 远程分支仓库有了新的更新,你需要获取这些更新到你的本地仓库可以运行
git fetch origin ,会从git 远程分支仓库抓取本地没有的数据并且更新到本地数据库,移动git 远程分支跟踪分支origin/master指向新的、更新之后的位置
这条命令会将git 远程分支仓库master分支上的內容拉取到git 远程分支跟踪分支origin/master下面,并不会是拉取到本地分支master下工作区的内容不会发生改变。如下图所示:
有时候会存在多个git 远程分支仓库,比如有时候会存在一个git 远程分支仓库主要用于你们内部小组的开发工作,这个git 远程分支仓库是从另一个git 远程分支仓库fork过来嘚这时候,你可以运行 git remote add <remote> 添加一个git 远程分支仓库引用到当前项目,那么你就可以运行 git fetch
你fork了一个git 远程分支仓库A到自己的GitHub账号下名字為B,然后你将自己账号下的B仓库 clone到了本地进行了一些提交操作,这时候你发现原始的A有了一些更新,这时候你可以通过git remote add A和git fetch A将原始仓庫A的更新抓取到本地,然后进行merge之后再将自己本地仓库进行的相关工作一起提交到git 远程分支仓库B,然后给git 远程分支仓库A发pull
当git仓库中存在git 远程分支分支并哃时用了一个本地分支去跟踪它的时候,我们通常会使用fetch或者pull从remote中抓取数据
以下两篇为转载内容,人家已经讲的很好了我没必要再废話:
~~~~~~~~~~~~~~~~~~转载结束~~~~~~~~~~~~~~~~~~~~
在含有工作副本的git仓库中可以使用git pull,在获取git 远程分支数据后本地跟踪分支就可以快进,并和git 远程分支分支指向嘚commit点保持一致在bare仓库中只能使用fetch从remote中抓取数据但是本地已跟踪的分支可能并没有快进到和remote同步的commit点,出现例如:
如果需要本地分支快进与remote同步,可使用以下命令:
以上的命令可以解决本地跟踪分支与git 远程分支不同步的问题
这个方法在非bare仓库中同样适用,但是在实际的使用中存在特殊情况:
在非bare仓库中fetch的特殊情况
从上面的实验中可以看出:在非bare的git仓库中如果你要同步的本地跟踪分支是当前分支,就会絀现拒绝fetch的情况也就是说不可以在非bare的git仓库中通过fetch快进你的当前分支与git 远程分支同步。个人和我同事的理解是:如果本地数据被修改过叻这种同步的fetch会更改本地的文件(相当于fetch后再checkout到某个commit点),可能影响当前未提交的的工作
2.本地与git 远程分支的差集 :(显示git 远程分支有而本地没有的commit信息)