git fetch origin branch1
git fetch origin branch1:branch2
首先执行上面的fetch操做,使用远程branch1分支在本地建立branch2(但不会切换到该分支),若是本地不存在branch2分支, 则会自动建立一个新的branch2分支,git
fetch更新本地仓库两种方式:web
//方法一 $ 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
一、git reset 服务器
没有push,这种状况发生在你的本地代码仓库,可能你add ,commit 之后发现代码有点问题.测试
首先,Git必须知道当前版本是哪一个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交commit_id(79f673d631b08907496ce792f429e1f00da25b73),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,固然往上100个版本写100个^
比较容易数不过来,因此写成HEAD~100
。fetch
HEAD
指向的版本就是当前版本,所以,Git容许咱们在版本的历史之间穿梭,使用命令git reset --hard 79f673d631b08907496ce792f429e1f00da25b73
。spa
穿梭前,用git log
能够查看提交历史,以便肯定要回退到哪一个版本。3d
要重返将来,用git reflog
查看命令历史,以便肯定要回到将来的哪一个版本。code
已经push,对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令xml
git revert用一个新提交来消除一个历史提交所作的任何修改.blog
revert 以后你的本地代码会回滚到指定的历史版本,这时你再 git push 既能够把线上的代码更新.(这里不会像reset形成冲突的问题)
revert 使用,须要先找到你想回滚版本惟一的commit标识代码,能够用 git log 或者在adgit搭建的web环境历史提交记录里查看.
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61
三、二者区别
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 是一直向前的.