一、Git工作流

1.jpg

四大板块

(1)工作目录

存放我们正在写的代码

(2)暂存区

暂时保存待提交的内容

(3)本地仓库

位于我们电脑上的一个版本控制仓库

(4)远程仓库

位于服务器上的版本控制仓库

二、创建本地仓库

2.1初始化为本地仓库

1
git init   #可以创建多个本地仓库

2.2查看当前仓库状态

1
git status     #查看当前,如果有未追踪的文件则需要追踪

2.3添加为追踪文件

1
git add text.txt      #添加完成就放到了暂存区等待提交

2.4这提交到本地仓库

1
git commit -m '描述'    #这个版本就提交到git的本地仓库了

2.5修改文件内容提交

1
git commit -a -m '备注'   #如果修改了已经提交过的文件内容,再次提交就使用这个命令

2.6查看提交日志

1
git log    #可以查看提交日志,谁在什么时候提交的,也能查看提交ID

2.7查看一条日志

1
git log --all --oneline --graph   #图形化查看一条日志的所有操作

2.8改变初始化提交

1
git reset --hard conmmitID   #改变初始化提交为哪一次提交的版本

2.9查看所有分支的所有操作记录

1
git reflog       #查看所有分支的所有操作记录 

三、新建分支

3.1查看当前所在分支

1
git branch

3.2创建新的分支

1
git branch 分支名 

3.3删除分支

1
git branch -d 分支名

3.4切换分支

1
git checkout 分支名   

四、合并分支

我们也可以将两个分支更新的内容最终合并到同一个分支上
我们先切换回主分支

1
git checkout master

然后合并

1
git merge 分支名   

如果合并有冲突,查看哪里发生了冲突

1
git diff  

五、变基分支

除了直接合并分支,我们还可以进行变基操作,它跟合并不同,合并是分支回到主干的过程,而变基是直接修改分支开始的位置,比如我们希望将text变基到master上,那么test会将分支起点移动到master最后一次提交位置

1
git rebase master

变基后,test分支相当于同步了此前master分支的全部提交

六、优选

我们还可以选择其它分支上的提交作用于当前分支,这种操作称为cherrypick

1
2
git checkout test   #先切换到test分支
git cherry-pick <commit ID> #单独合并一个提交

这里我们在master分支上创建一个新的文件,提交此次更新,接着通过cherry-pick的方式将此次更新作用于test分支上。

七、使用IDEA版本控制

虽然前面学习了git命令行的使用方法,但是没有一个图形化界面,始终会感觉很抽象,所有再继续学习使用IDEA的版本控制

打开IDEA后,找到版本控制模块,我们直接点击创建本地仓库,它会自动将当前项目的根目录作为我们的本地仓库,当我们编写的所有代码和项目目录下其它文件都可以进行版本控制

我发现所有项目中正在编写的类文件全部变红了,也就是处于未追踪状态,接着我进行第一次初始化提交,提交之后我可以在下方看到所有本地仓库提交记录

接着我来整合一下Web环境,创建新的类之后,IDEA会提示我们是否将文件添加Git,也就是是否放入暂存区并开启追踪,我们可以直接对比两次代码的相同和不同之处。

八、远程仓库

8.1 远程仓库概述

远程仓库实绩上就是位于服务器上的仓库,它能在远端保存我们的版本历史,并且实现多人同时合作编写项目,每个人都能够同步他人的版本,能够看到他人的版本提交,相当于将我们的代码放在服务器上进行托管。

8.2 Github和Bitbacket

托管 Git 仓库最受欢迎的网站是 GitHub 和Bitbucket。:GitHub 为开源项目提供无限量的免费仓库,但私有仓库收费;而 Bitbucket 提供了无限量的私有仓库,仅当协作者超过一定数量时才收费。选择哪个网站,取决于具体的需求。在学习ruby on rails的教程中作者将代码托管在了Bitbucket上面,所以我也申请了一个账号试试。觉得用户体验还是很棒的。跟github很像,界面也十分友好。这是一个免费托管私人仓库的好地方。

8.3 公有和私有远程仓库

远程仓库有公有和私有的,公有的远程仓库有GitHub,码云,Coding等,他们都是对外开放的,我们注册账号之后就可以使用远程仓库进行版本控制,其中最大的就是GitHub,但是它服务器在国外,国内链接可能会有一点卡。私有一般是GitLab这种自主搭建的远程私服,在公司中比较常用,我们公司的项目就是托管在GitLab上,使用局域网搭建的一个远程仓库,它只对公司内部开放,不对外开放。

8.9 将自己的项目conmmit到本地仓库以后push到远程仓库

1、完成本地提交

1
2
git commit -a -m '提交描述'
git log --oneline --all --graph

2、让本地仓库知道远程仓库的存在(本地仓库绑定远程仓库)

1
git remote add origin https地址  

3、push到远程仓库

语法格式:

1
git push 远程仓库分支 本地分支名称

具体命令

1
git push origin maser

4、本地绑定远程

我们可以将远端和本地的分支进行绑定,绑定后就不需要指定分支名称了

1
2
git Push--set-upstream yecode master:master
git push yecode

在一个本地仓库对应一个远程仓库的下,远程仓库基本上就是纯粹的代码托管了,类似于云盘那种感觉,存你的代码。

九、克隆项目

1
git clone https地址

十、抓取、拉取和冲突解决

比如程序员A完成了他的模块,那么他就可以提交代码并推送到远程仓库,这时程序员B也要开始写代码了,由于远程仓库有其他程序员提交的记录,因此程序员B的本地仓库就和远程仓库不一致,就需要先进行pull操作,获取远程仓库最新的提交:

1
2
git fetch   #抓取:只获取但是不会合并远端分支,后面需要我们手动合并并提交
git pull #拉取:获取+合并

如果存在不协调的地方,比如本地有两个仓库,一个仓库去修改hello.txt并直接提交,另一个仓库也修改hexllo.txt并直接提交,会报错

一旦一一个本地仓库推送了代码,那么另一个本地仓库的推送会被拒绝,原因是当前文件已经被其他的推送给修改了,我们这边相当于是另一个版本,和之前两个分支合并一样,产生了冲突,因此我们只能去解决冲突问题。

如果远程仓库中的提交和本地仓库的提交没有去编写同一个文件,那么就可以直接拉取:

1
git pull 远程仓库