一、版本控制器的方式

1.集中式版本控制工具

        版本库集中存放在中央服务器,团队中的每个人工作时从中央服务器下载代码,必须联网才能工作,每个人修改完后再提交到中央服务器的版本库。如SVN(如图)和CVS。
        

2.分布式版本控制工具

        分布式版本控制系统没有中央服务器,每个人的电脑上都是一个完整的版本库,工作时无需联网。如Git

二、Git操作流程图


三、Git基础操作指令

1.  Git工作目录下文件的几个状态

        Git工作目录(git本地仓库所在目录)下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行git的命令而变化。
        

2.常用命令

命令 说明
git status 查看文件修改状态
git add 单个文件名或通配符
①将工作区的一个或多个文件的修改到暂存区:git add FileName
将工作区的所有文件的修改到暂存区:git add .
git commit -m '注释内容'
将暂存区的内容提交到本地仓库的分支
git log [option]
查看提交日志
    [option]:
  • --all  显示所有分支
  • --pretty=oneline  将提交信息显示为一行
  • --abbrev-commit  使得输出的commitId更简短
  • --graph  以图的形式显示
【tips】已将git log [option]所有指令用别名git-log代替。
git reset --hard commitID
切换内容的版本
git reflog 查看已删除的提交记录

3.添加文件至忽略列表

        有些文件(如自动生成的日志文件、编译过程中创建的临时文件等)不需要使用git管理,也不希望它们总出现在未跟踪文件列表,这时可以在工作目录中创建一个名为.gitignore的文件,列出需要忽略的文件。

四、git分支

        使用分支可以把工作从开发主线上分离开来,以免影响开发主线。

1.常用的分支命令

(1)查看分支

git branch
【tips】Git 的默认分支名字是 master。

(2)创建一个新分支

git branch b1

(3)分支切换

git checkout b1
git checkout -b  b1 //可以切换到一个不存在的分支,即创建分支并切换
【tips】HEAD指向当前分支。

(4)合并分支:

        将b1分支合并到master上:

git merge b1
【tips】①一般是将其他分支合并到master上。
             ②想将b1分支合并到b2分支上,需要先切换到b2分支上执行git merge b1。

(5)删除分支

git branch  -d  b1 //删除分支时需要做各种检查
git branch  -D  b1 //不做任何检查,强制删除
【注意】不能删除当前分支,删除前应先切换到其他分支。

(6)解决冲突

        不同分支上对文件的修改可能会存在冲突,如两个分支同时修改了同一文件的同一行内容,这时就需要手动解决冲突:
        1)手动修改文件中产生冲突的位置上的内容;
        2)将修改后的文件重新加入暂存区;
        3)提交文件到工作区。

2.分支原则与流程

        在开发中,一般有如下分支使用原则与流程:
(1)master(生产)分支        
(2)develop(开发)分支
(3)feature/xxx分支
(4)hotfix/xxx分支

五、Git远程仓库

        Git中存在两种类型的仓库——本地仓库和远程仓库,可以借助一些代码托管服务来搭建远程仓库,如GitHub、码云、GitLab等。

1.常用的远程仓库

(1)GitHub
        是一个面向开源及私有软件项目的托管平台。
(2)码云
        国内的一个代码托管平台,因此速度更快些。
(3)GitLab
        是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具。

2.码云的使用

(1)创建远程仓库

(2)SSH公钥

        1)生成SSH公钥:
ssh-keygen -t rsa
【tips】如果公钥已存在,则会自动覆盖。
        2)获取公钥:
cat ~/.ssh/id_rsa.pub
        3)Gitee设置账户公钥
        设置→SSH公钥→添加公钥
        4)验证是否配置成功
ssh -T git@gitee.com

(3)在本地仓库配置远程仓库

        1)添加远程仓库
git remote add origin 仓库地址
【tips】origin是自己起的远程仓库的名字,一般一个本地仓库对应一个远程仓库,都起名叫origin。
        2)查看远程仓库
git remote
        3)将本地内容推送(push)到远程仓库
git push [-f] [--set-upstream] 远程仓库名 本地分支名:远程分支名
  • 本地分支名和远程分支名相同,可省略":远程分支名",只写本地分支名,即:
git push origin master
  • --set-upstream:推送到远程仓库的同时建立和远程分支的关联关系
  • 若当前分支已和远程分支关联,可省略远程仓库名和本地分支名,
git push
【tips】查看关联关系命令:
git branch -vv

  • -f:强制推送

(4)从远程仓库克隆(clone)到本地

git clone 仓库地址 自定义仓库名

(5)从远程仓库抓取(fetch)和拉取(pull)

        远程分支和本地分支一样,都可以进行合并(merge)操作,merge前需要先把远程分支下载到本地仓库——抓取和拉取。
        1)抓取(fetch):将远程分支的修改操作下载(抓取)到本地仓库,但不会merge
git fetch [remoteName] [remoteBranchName]
【注意】如果不指定远程仓库名和远程分支名,则会抓取所有远程分支。
        2)拉取(pull)将远程分支的修改操作下载到本地仓库并自动merge到当前分支,等同于fetch+merge。
git pull [remoteName] [remoteBranchName]
【注意】如果不指定远程仓库名和远程分支名,则会拉取所有远程分支。

(6)解决merge冲突问题

        A在本地修改代码后先push到远程仓库,而B在本地修改代码,也需要push到远程仓库,但因为B在A之后修改所以B需要先从远程仓库拉取提交,经merge后才能push到远程仓库。但B在拉取提交时,由于A和B修改了同一文件相同位置的代码,这时merge会产生冲突。
        手动解决冲突:
        1)手动修改文件中产生冲突的位置上的内容;
        2)将修改后的文件重新加入暂存区;
        3)提交文件到工作区;
        4)进行push操作。

六、在IDEA中使用Git

1.在IDEA中配置Git

        setting→搜索git→选择Git安装目录并Test→显示Git版本则配置成功

2.使用Git

(1)创建项目远程仓库

(2)初始化本地仓库(放在IDEA项目目录里):

       1)先将.gitignore文件放到项目目录下:
        
        2)VCS→创建Git仓库→选择项目目录→IDEA界面右上角出现如图所示时,初始化本地仓库成功:
                                    

(3)提交(commit)项目文件到本地仓库:

         →勾选Unversioned Files→填commit messages→commit
        

(4)如何查看提交记录(=git-log)?

         

(5)将本地修改推送(push)到远程仓库

         →创建远程仓库→填入远程仓库URL→push
        
【tips】创建好远程仓库后,以后commit可以直接顺带push:
        

(6)克隆仓库

        复制被克隆仓库的SSH→IDEA中Git的clone→填好SSH和克隆位置→clone
        
        
        

(7)解决冲突问题

        出现冲突→手动更改代码→将报红文件add(变蓝)→提交推送
        
        
        

(8)分支操作

        1)创建分支:
        
        2)切换、合并分支:
        
注意切换分支前必须先提交本地修改,防止代码丢失!