add . #添加代码
commit -m '提交到本地仓库' #提交到本地仓库
pull #拉取远程仓库代码
merge #合并分支 解决分支冲突后在提交
add.
commit -m '提交'
push origin v1.0.0
其他命令
tag v1.0.0 # 打标签
git push origin :refs/tags/v1.0.0 #删除远程标签
git pull用法:
git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并。
一句话总结git pull和git fetch的区别:git pull = git fetch + git merge
git fetch不会进行合并执行后需要手动执行git merge合并分支,而git pull拉取远程分之后直接与本地分支进行合并。更准确地说,git pull使用给定的参数运行git fetch,并调用git merge将检索到的分支头合并到当前分支中。
基本用法:
git pull <远程主机名> <远程分支名>:<本地分支名>
例如执行下面语句:
git pull origin master:brantest
将远程主机origin的master分支拉取过来,与本地的brantest分支合并。
后面的冒号可以省略:
git pull origin master
表示将远程origin主机的master分支拉取过来和本地的当前分支进行合并。
上面的pull操作用fetch表示为:
git fetch origin master:brantest
git merge brantest
克隆分支boaiO2o到本地
git clone -b boaiO2o https://gitee.com/ykboai/boaiB2CH5.git
相比起来git fetch更安全一些,因为在merge前,我们可以查看更新情况,然后再决定是否合并。
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
首先我们先看一张图:
先理解这几个概念:暂存区,本地仓库,远程仓库
暂存区
这个是我们每一次进行代码修改的地方,例如我们ieda的所编译的代码就是缓存区
本地仓库:
是我们每一次pull,从远程仓库pull(拉取)到地方,这个地方就是本地仓库 ,他其实就是
远程仓库的一个副本
远程仓库:
这个是存放到服务器上的代码,是每一个人认为自己的代码修改好了,就可以集体上传
到一个地方,而你也可以从这个地方下载别人的代码,这个地方就是远程仓库。
我们接下来就来介绍一下使用情况,
Master:主分支
wangjing18-dev:Master分支,这个是存放博主的代码的地方
Stanging:Master分支,这个是我们集体存放测试代码的分支
例如:
你有一个项目,你在本地测好了,但是你想放到线上服务器,但是你又不确定没有bug,则这个时候你可以把代码放入到线上的测试环境上面,这个时候是线上的测试环境,可以让测试人员也可以访问的到。
这个图的意思:
pull:远程仓库拉取数据到本地仓库
就是为了和远程仓库所匹配
commit:
当我们想要把自己的代码想要提交到远程的时候,所用的命令行语句,由于我们修改所在的区域在暂存区,我们首先要把自己的代码commit(提交)到本地仓库,然后在从本地仓库push到远程仓库,但是切记住一点,我们如果每一次在commit的时候,我们都需要先从线上pull最新的代码到本地仓库,然后在把暂存区里面的代码提交到本地仓库,这个时候如果没有冲突固然是最好的,如果有了冲突,这我需要解决冲突,这个此时本地仓库已经是最新的代码且又包括暂存区上面的代码了
push:
这个就是我们前面把代码提交到了本地,如果我们需要提交到远程服务器上,则需要把代码push到远程的分支里面,如果有了冲突,再解决就好了
merge:
如果有两个分支里面的代码在同一个区域中(两个同时隶属于暂存区,或本地仓库,或远程仓库),这个时候如果我们想要把这个两个分区合并,这个也就是所谓commit,只不过这个不跨区域,此时我们wangjing18-dev的这个分支mergeStanging,此时这个mergeStanging就有了wangjing18-dev的代码,然后我们在commit,然后在push,
则这个样子就可以了这个就是git的简单的使用原理
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查看命令历史
,以便确定要回到未来的哪个版本。
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 是一直向前的.