感谢优达的免费课程,还有网络上热心的网友,尤为是廖雪峰老师的教程帮我填补好多空缺。这是三个笔记中最后一个了,个人课外学习要先告一段落了,考验要紧啊,还没咋复习呢。内心好慌,但愿本身能耐得住性子坐下来复习。加油!git
必定要从本身的帐号下clone仓库,这样你才能推送修改。若是从原做者的仓库地址克隆,由于没有权限,你将不能推送修改。因此为此必须在GitHub上新建一个空的仓库。使用它来保存其余人的仓库,并实现与本地的交互。每次更新GitHub时,更新的是一个分支,他会检查该更新全部的提交,若是GitHub中存在就不须要再次上传,若是没有则会提交。 安全
在建立一个新的GitHub仓库时,会有选项“使用README来初始化仓库”:若是这彻底是一个新的仓库而且本地也没有任何相关内容的话,建议使用该选项,他会初始化一个commit。不然你没法克隆一个空的仓库。在GitHub的远程仓库中能够直接建立纯文本文件。网络
互联设置:由于Git是分布式版本控制系统,因此,每一个机器都必须自报家门:你的名字和Email地址。app
git config --global user.name "Your Name" git config --global user.email "email@example.com"
注意:git config命令的--global参数,用了这个参数,表示你这台机器上全部的Git仓库都会使用这个配置,固然也能够对某个仓库指定不一样的用户名和Email地址。分布式
查看和建立远程仓库:git remote。学习
更新远程仓库:fetch
git push 远程仓库名 本地分支名spa
复制GitHub上其余人的库 3d
对于GitHub上想要修改的仓库,可使用fork按钮将其复制到本身的帐户中,GitHub会自动给出原文件连接。想要对其进行修改,除非改动很是小,不然都须要clone到本地,使用git clone URL克隆时,git会自动地建立一个远程仓库并指向克隆的原始仓库。能够食用git remote -v验证。这里的URL是fork的主页URL。版本控制
图一从GitHub上克隆到本地
在本身建立一个库的同时还有合做伙伴的时候,能够选用“合做者“一同开发,不过主人仍是有主导权的,在setting选项卡中,有collaboration选项能够添加不一样的合做者。
git会把你的全部远程分支在本地保存一个副本,他会包含最后一次拉取、推送时分支的状态。远程分支的本地副本以“远程仓库名/分支名”为名,与远程推送储存在一块儿。
更新远程分支本地副本
git fetch:更新远程分支的本地副本,同时实际的本地版本不发生变化。
从远程仓库拉取最新的状态
git pull:从远程仓库拉取最新的状态,并把它与本地的分支进行合并。
合并机制
这原本是要在上一篇中讲的,上一篇内容太多了,正好这里也有合并的内容,就放在了这里。
快速合并:你要git默认的合并方式,判断依据是与本分支合并的分支是不是本分支的祖先。若是是这种状况,后面的分支会有前面的分支全部内容,没有必要再产生一个标签,只要把祖先的标签移到最后便可。可是即便是使用快速合并,在GitHub上也会产生一个commit。也可使用强制非快速合并,合并分支时,加上--no-ff参数就能够用普通模式合并,合并后的历史有分支,能看出来曾经作过合并,而fast forward合并就看不出来曾经作过合并。因此建议使用非快速合并。
图二快速合并举例
分支策略
在实际开发中,咱们应该按照几个基本原则进行分支管理:
首先,master分支应该是很是稳定的,也就是仅用来发布新版本,平时不能在上面干活;那在哪干活呢?干活都在其余分支上如:easy-mode,也就是说,easy-mode分支是不稳定的,到某个时候,好比1.0版本发布时,再把easy-mode分支合并到master上,在master分支发布1.0版本;你和你的小伙伴们每一个人都在easy-mode分支上干活,每一个人都有本身的分支,时不时地往easy-mode分支上合并就能够了。
拉取请求
若是在本地新建一个分支并在其上进行修改,将其推送到GitHub上时也会一样建立一个分支。若是想让其余人更改使用“pull request”拉取请求,即别人能够提交修改,你能够决定是否将其合并到master分支上。设置“pull request”时要注意,GitHub默认是将新分支合并到最原始的仓库中,若是不想必定要更改。拉取请求其实就是合并请求,合做者把想合并到主分支的文本提交到GitHub上,若是主人赞成就能够合并到主分支上了。
图三更改请求提交位置
设置完以后,会在仓库主页中出现pull request选项卡,新的拉取请求在其中,选择相应的请求,会看到最新的提交,你能够点开看到更改的内容。
图四拉取请求位置
若是有多个pull request,而且他们之间有冲突的话,通常的解决方法是先先判断哪一个请求要合并,不须要合并的请求直接删除,减小冲突。若是两个都须要的合并产生冲突能够先合并一个,删除该分支,而后在本地电脑上解决冲突,并将解决方案与主分支(想要被合并的分支)合并到解决方案所在地分支中,而后将该分支push到GitHub中,用来更新“pull request”。使用“git pull 远程仓库名 分支名”来拉取远程仓库中相应的分支。
不要直接将修改合并到主分支而后push,这样会致使合做者没法看到你的更改。
若是在你修改本地仓库添加新内容时,原做者修改了他的文件致使你没法与最新版本进行合并,能够先建立一个指向源库的远程仓库通常叫作upstream,在本地解决冲突,而后将其push到本身的GitHub上再次提出pull request
图六 git中一些经常使用概念以及方法的关系
如下内容都是后加的。
冻结现场命令git stash
若是遇到突发状况,须要马上去其余分支上处理问题,可是有头上的工做还没作完没法commit,这时候可使用命令git stash能够把当前工做现场“储藏”起来,等之后恢复现场后继续工做。
使用git stash命令后,用git status查看工做区,就是干净的(除非有没有被Git管理的文件),所以能够放心地建立分支来修复bug。
用git stash list命令找到储藏的工做现场,须要恢复一下,有两个办法:
你能够屡次stash,恢复的时候,先用git stash list查看,而后恢复指定的stash,用命令
图七 git stash命令使用状况
标签tag
这东西没有听老师讲过,可是看了廖雪峰老师的教程后明白了,其实很简单,给个原连接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013762144381812a168659b3dd4610b4229d81de5056cc000
标签说白了就是一个代号罢了,为了简化commit ID。
使用也很是简单添加标签使用命令git tag <name>。一般会默认放在该分支的最新提交上。git tag -a <tagname> -m "blablabla..."能够指定标签信息,git tag能够查看全部标签。可使用git tag <name> commitID给相应ID的commit补上一个标签。
由于建立的标签都只存储在本地,不会自动推送到远程。因此,打错的标签能够在本地安全删除使用命令:git tag –d <name>
命令git push origin <tagname>能够推送一个本地标签到远程。