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_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步

如果没有,随便哪个位置打开Shell(Windows下打开Git Bash),创建SSH Key:

1
ssh-keygen -t rsa -C "youremail@example.com"

把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码

一切顺利的话可在用户主目录里找到.ssh目录,里面有id_rsaid_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给官方仓库来贡献代码(别人可以同意也可以不同意)

 

posted @ 2018-08-12 12:08  woz333333  阅读(168)  评论(0编辑  收藏  举报