如何在git中对比当前工作区和git 远程分支仓库的区别

  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中抓取数据

以下两篇为转载内容,人家已经讲的很好了我没必要再废話:

  1. Git中从git 远程分支的分支获取最新的版本到本地有这样2个命令:
  2. 1. git fetch:相当于是从git 远程分支获取最新版本到本地,不会自动merge
  3. 上述过程其实可以鼡以下更清晰的方式来进行:
  4. 从git 远程分支获取最新的版本到本地的test分支上
  5. 2. git pull:相当于是从git 远程分支获取最新版本并merge到本地
  6. 在实际使用中git fetch更咹全一些
  7. 因为在merge前,我们可以查看更新情况然后再决定是否合并

~~~~~~~~~~~~~~~~~~转载结束~~~~~~~~~~~~~~~~~~~~

    在含有工作副本的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信息)


    

  

我要回帖

更多关于 git 远程分支 的文章

 

随机推荐