Git使用
内容:
1.Git介绍与安装与原理
2.Git基本操作
3.分支管理
4.远程仓库
5.多人协作
6.github使用 - 开源项目
参考:
http://www.cnblogs.com/alex3714/articles/5930846.html
https://www.cnblogs.com/wupeiqi/p/7295372.html
注:本节主要以git命令操作为主
1.Git介绍与安装
(1)关于Git
git是一个用于帮助用户实现版本控制的软件
git的作用: 版本控制
(2)Git安装
最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行
Linux上安装:
1 sudo apt-get install git
Windows or Mac:
下载安装包自己安装:https://git-scm.com/downloads
后面的例子以Windows系统为例,Windows系统成功安装Git后,右键点击文件夹或桌面选项中将会出现两个Git开头的选项。选择Git Bash Here,打开的窗口就是写Git命令的地方,如下所示:
(3)Git原理
Git把管理的文件分为了两个区域四个状态:
工作区:当前开发程序所在目录称为工作区,即:工作开发都是在该目录,该区域的文件会有状态的变化且状态由git自动检测,如果程序中文件做任何操作(增、删、改),文件状态均会被检测到,可以使用 【git status】命令查看
版本库:工作区检测到有文件发生变化,那么意味着较上一个版本之后对程序进行了修改,修改完成之后,可以当做下一版本进行提交,那么就是执行 【git add .】 将所有文件提交到暂存区,然后再执行【git commit -m '又一个版本'】提交到版本库的分支即可,之后可以使用【git log】命令查看版本记录
上述图片中常用命令:
- git init,初始化,表示即将对当前文件夹进行版本控制。
- git status,查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。
- git add 文件名,将指定文件添加到版本库的暂存状态。
- git commit -m '提交信息',将暂存区的文件提交到版本库的分支。
- git log,查看提交记录,即:历史版本记录
2.Git基本操作
(1)创建仓库 -> git init
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”
所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录,建了空目录然后在此目录下执行git init 目录即可创建仓库:
如上所示瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository)
(2)添加文件 -> git add
在文件夹中新建一个文件后通过git add 添加到仓库中:
注:git add . -> 一次性添加所有文件
(3)提交代码 -> git commit
接着使用git commit命令将文件提交到仓库中:
(4)代码修改并提交 -> git add 和 git commit
修改文件中的内容,运行git status命令查看如下:
虽然Git告诉我们test.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。查看具体修改内容可以使用git diff命令:
输出中+号绿色显示的就是修改或新增的内容,-号红色显示的就是去掉或被修改的内容
知道了对源文件作了什么修改后,再把它提交到仓库就放心多了,再次提交到仓库先使用git add再使用git commit:
(5)代码回滚 -> git log 和 git reflog 和 git reset
在实际工作中Git仓库中的历史记录,可以用git log
命令查看:
git log
命令依次显示从最近到最远的提交日志,上面那一大串数字和字符的混合体是版本号,是一个SHA1计算出来的一个非常大的数字,用十六进制表示
接下来我们要开始回滚要把第二次提交回滚到第一次提交,使用git reset命令,后面带上--hard参数以及要回退到的版本号:
回滚倒是完成了,如果想要在回到第二次提交的版本怎么办呢?不能像以往通过【git log】来查看记录再回滚了,再回去需要这么搞:
(6)撤销修改 -> git checkout 和 git reset
人都是犯错的,有时候在文件中可能写错了一些东西需要我们去撤销修改,Git中撤销修改的命令是git checkout -- file(当然没添加的时候一般都是手动撤销修改)
git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout
命令
加入你git add文件到了暂存区,庆幸的是,在commit
之前,你发现了这个问题。用git status
查看一下,修改只是添加到了暂存区,还没有提交
此时可以用命令git reset HEAD file
把暂存区的修改撤销掉,重新放回工作区:
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本
(7)删除操作 -> git rm 和 git checkout
在Git中,删除也是一个修改操作,假如在文件夹中删除了一个文件,这个时候,Git知道你删除了文件
因此,工作区和版本库就不一致了,git status
命令会立刻告诉你哪些文件被删除:
此时有两种选择:
- 从版本库中删除该文件,那就用命令
git rm
删掉,并且git commit提交删除
- 删错了,但版本库里还有,所以可以很轻松地把误删的文件恢复到最新版本
第一种选择(删除版本库中的):
第二种选择(撤销工作区中的删除):
git checkout本质上
是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
3.分支管理
(1)什么是分支
branch称为分支,默认仅有一个名为master的分支。一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支
(2)分支操作
branch相关常用命令:
- git branch 分支名称 创建分支
- git checkout 分支名称 切换分支
- git branch -m 分支名称 创建并切换到指定分支
- git branch 查看所有分支
- git branch -d 分支名称 删除分支
- git merge 分支名称 将指定分支合并到当前分支
注:git merge 时也可能会出现冲突,解决冲突的方式上述stash相同,即:找到冲突文件,手动修改冲突并提交,此处不再敖述
实例:
依然使用上述的库,新建一个文件test.txt(在前面删除了):
新建dev分支并切换到dev分支:
在dev分支上修改文本内容修改完后提交到dev分支上然后切换到主分支上:
切换到主分支后查看文件内容:
接着在把dev分支合并到主分支上:
主分支上的文件内容:
(3)补充 - stash
stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区
stash相关常用命令:
- git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
- git stash list 查看“某个地方”存储的所有记录
- git stash clear 清空“某个地方”
- git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
- git stash apply 编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
- git stash drop 编号,删除指定编号的记录
注:执行 git stash pop 命令时,可能会遇到冲突,因为在紧急修复bug的代码和通过stash存储在“某个地方”的代码会有重合部分,所以执行 git stash pop 时候就会出现冲突,有冲突解决冲突即可
4.远程仓库
基于GitHub实现代码托管,需要以下步骤:
(1)自行注册github,并进行相关设置
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:创建SSH Key
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步
如果没有,随便哪个位置打开Shell(Windows下打开Git Bash),创建SSH Key:
1
|
$ ssh -keygen -t rsa -C "youremail@example.com" |
把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码
一切顺利的话可在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人
第2步:登陆GitHub 添加ssh key
打开“Account settings”,“SSH Keys”页面
然后,点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容:
点“Add Key”,然后就可以添加成功了
(2)完成上述操作后,点击new repository创建新仓库
(3)在上面点击create repository之后显示如下
详细解释如下:
(4)把本地文件提交到github网站上的仓库
push完了之后就可以去github上查看,当然也可以从github中的仓库上把某个分支pull下来继续开发,使用git pull origin 分支名
注:push和pull之前必须配置了ssh否则不能使用!
(5)克隆远程仓库
使用git clone命令可以克隆远程仓库(随便克隆),也就是下载远程仓库中的代码,步骤如下:
先随便进入一个仓库然后点击右上角的clone or download,然后复制链接
复制链接之后,使用git clone 链接 即可克隆该仓库
上述内容可整理成如下一张图:
长此以往,将Git和GitHub结合使用做到避免电脑损坏造成数据丢失以及多地开发的问题,上文执行过程中执行 【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】,并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码有重合部分,那么就需要自己手动解决冲突然后再继续开发
另外,git rebase可以保持提交记录的整洁
5.多人协作
1 (1)允许他人操作程序 2 - 合作者(在github上允许别人) 3 - 在github上创建组织 4 5 (2)分支 6 - master 7 - dev 8 - xdb 9 - zhh 10 11 (3)规则 12 - 一起合并 13 - 合并时间:1/2 14 15 大概总结:个人在自己的分支上开发,功能开发完了把github上的dev拉下来然后把自己的分支合并到dev分支上,测试没问题合并到master分支上 16 合并的时候一起合并,小功能完结之后就合并(大概一两天) 17 18 19 问题: 20 $ git push origin dev 21 To https://github.com/WuPeiqi/dbhot.git 22 ! [rejected] dev -> dev (fetch first) 23 error: failed to push some refs to 'https://github.com/WuPeiqi/dbhot.git' 24 hint: Updates were rejected because the remote contains work that you do 25 hint: not have locally. This is usually caused by another repository pushing 26 hint: to the same ref. You may want to first integrate the remote changes 27 hint: (e.g., 'git pull ...') before pushing again. 28 hint: See the 'Note about fast-forwards' in 'git push --help' for details. 29 30 (4)做代码review 31 如何做代码review? 32 - 创建review分支(在上面的合并到dev之前进行) 33 谁来锁代码review? 34 - 组长 35 - 带你的人
6.github使用 - 开源项目
(1)关于开源项目
我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的
其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人的开源项目
但是在GitHub上,利用Git极其强大的克隆和分支功能,我们可以自由的参加各种开源项目
(2)如何参与开源项目
访问项目主页点fork克隆项目仓库(一定要从自己的账号下clone仓库,这样你才能推送修改)
如果你想修复项目的一个bug,或者新增一个功能,立刻就可以开始干,干完后,往自己的仓库推送
如果你希望别人能接受你的修改,你就可以在GitHub上发起一个pull request(对方是否接受你的pull request就不一定了。)
小结
-
在GitHub上,可以任意Fork开源仓库
-
自己拥有Fork后的仓库的读写权限
-
可以推送pull request给官方仓库来贡献代码(别人可以同意也可以不同意)