学习Git版本控制笔记
一、Git工作流
四大板块
(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 | git checkout test #先切换到test分支 |
这里我们在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 | git commit -a -m '提交描述' |
2、让本地仓库知道远程仓库的存在(本地仓库绑定远程仓库)
1 | git remote add origin https地址 |
3、push到远程仓库
语法格式:
1 | git push 远程仓库分支 本地分支名称 |
具体命令
1 | git push origin maser |
4、本地绑定远程
我们可以将远端和本地的分支进行绑定,绑定后就不需要指定分支名称了
1 | git Push--set-upstream yecode master:master |
在一个本地仓库对应一个远程仓库的下,远程仓库基本上就是纯粹的代码托管了,类似于云盘那种感觉,存你的代码。
九、克隆项目
1 | git clone https地址 |
十、抓取、拉取和冲突解决
比如程序员A完成了他的模块,那么他就可以提交代码并推送到远程仓库,这时程序员B也要开始写代码了,由于远程仓库有其他程序员提交的记录,因此程序员B的本地仓库就和远程仓库不一致,就需要先进行pull操作,获取远程仓库最新的提交:
1 | git fetch #抓取:只获取但是不会合并远端分支,后面需要我们手动合并并提交 |
如果存在不协调的地方,比如本地有两个仓库,一个仓库去修改hello.txt并直接提交,另一个仓库也修改hexllo.txt并直接提交,会报错
一旦一一个本地仓库推送了代码,那么另一个本地仓库的推送会被拒绝,原因是当前文件已经被其他的推送给修改了,我们这边相当于是另一个版本,和之前两个分支合并一样,产生了冲突,因此我们只能去解决冲突问题。
如果远程仓库中的提交和本地仓库的提交没有去编写同一个文件,那么就可以直接拉取:
1 | git pull 远程仓库 |