git fetch 更新远程代码到本地仓库

git fetch 更新远程代码到本地仓库

理解 fetch 的关键, 是理解 FETCH_HEAD,FETCH_HEAD指的是: 某个branch在服务器上的最新状态’。这个列表保存在 .Git/FETCH_HEAD 文件中, 其中每一行对应于远程服务器的一个分支。

当前分支指向的FETCH_HEAD, 就是这个文件第一行对应的那个分支.
一般来说, 存在两种情况:
  • 如果没有显式的指定远程分支, 则远程分支的master将作为默认的FETCH_HEAD.
  • 如果指定了远程分支, 就将这个远程分支作为FETCH_HEAD.
git fetch origin branch1

 

这个操作是git pull origin branch1的第一步, 而对应的pull操作,并不会在本地创建新的branch。设定当前分支的 FETCH_HEAD’ 为远程服务器的branch1分支`。 
 
这个命令可以用来测试远程主机的远程分支branch1是否存在, 如果存在, 返回0, 如果不存在, 返回128, 抛出一个异常.
git fetch origin branch1:branch2

首先执行上面的fetch操作,使用远程branch1分支在本地创建branch2(但不会切换到该分支),如果本地不存在branch2分支, 则会自动创建一个新的branch2分支,

如果本地存在branch2分支, 并且是`fast forward’, 则自动合并两个分支, 否则, 会阻止以上操作.

fetch更新本地仓库两种方式:

复制代码
//方法一
$ git fetch origin master //从远程的origin仓库的master分支下载代码到本地的origin master

$ git log -p master.. origin/master//比较本地的仓库和远程参考的区别

$ git merge origin/master//把远程下载下来的代码合并到本地仓库,远程的和本地的合并

//方法二
$ git fetch origin master:temp //从远程的origin仓库的master分支下载到本地并新建一个分支temp

$ git diff temp//比较master分支和temp分支的不同

$ git merge temp//合并temp分支到master分支

$ git branch -d temp//删除temp
复制代码

 

 

1、git reset 

没有push,这种情况发生在你的本地代码仓库,可能你add ,commit 以后发现代码有点问题.

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交commit_id(79f673d631b08907496ce792f429e1f00da25b73),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard 79f673d631b08907496ce792f429e1f00da25b73。

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

2、git revert

已经push,对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令

git revert用一个新提交来消除一个历史提交所做的任何修改.

revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)

revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看.

git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61

3、两者区别

git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit看似达到的效果是一样的,其实完全不同.

第一:上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突(或git push -f强制推送).但是revert 并不会.

第二:如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.

第三:reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的. 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112416.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • svn配置帐号密码「建议收藏」

    svn配置帐号密码「建议收藏」svn/config下authz:###Thisfileisanexampleauthorizationfileforsvnserve.###Itsformatisidenticaltothatofmod_authz_svnauthorization###files.###Asshownbeloweachsectiondefinesauth…

    2022年9月4日
  • readprocessmemory函数分析_max函数用法

    readprocessmemory函数分析_max函数用法函数功能描述:该函数用来读取指定进程的空间的数据,此空间必须是可以访问的,否则读取操作会失败!函数原型BOOLReadProcessMemory(  HANDLEhProcess,  //目标进程句柄  LPCVOIDlpBaseAddress,                    //读取数据的起始地址  LPVOIDlpBuffer,  //存放数据的缓存区地址 

    2022年9月28日
  • dual channel ddr3主板_ddr3 std

    dual channel ddr3主板_ddr3 std第一次看到ODT这个东西,真是一头雾水;然后是TerminationRank,FAE解释了几次,也没明白。究其原因,这玩意儿和硬件太相关,而不是纯粹软件的TRUEorFALSE。好歹也是通信工程毕业,号称软硬通吃,怎能被轻易难倒?ODT,全称OnDieTermination。我们先说Termination的概念。一个DDR通道,通常会挂接多个Rank,这些Rank的数

    2022年9月9日
  • Spring c3p0连接池配置以及出错原因

    Spring c3p0连接池配置以及出错原因 用的jar包com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar配置:注意:如果出错原因(1)很有可能c3p0-config.xml中的配置文件出现问题,比如我是因为把“driverClass”不小心写成了“driver”,             所以在书写c3p0-config.xml要特别小心,可能多一个空格或者格式稍有问题,都…

    2022年5月22日
  • Scala Json对象转Map对象[通俗易懂]

    Scala Json对象转Map对象[通俗易懂]importcom.google.gson.{JsonObject,JsonParser}importscala.collection.JavaConversions._valjsonStr=”””{“a”:1,”b”:2,”c”:3}”””valjsonObj=jsonParser.parse(jsonStr).asInstanceOf[JsonObject]valjson2map=jsonObj.entrySet.map(x=>(x.getKey,

    2022年8月23日
  • 菜鸟开发—应具备的搜索技巧[通俗易懂]

    菜鸟开发—应具备的搜索技巧

    2022年1月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号