一 Git 是什么及流程
Git是目前世界上最先进的分布式版本控制系统。
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
二:SVN与Git的最主要的区别?
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
三:基本操作
1:创建版本库。
版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。
通过命令 git init 把这某个个目录变成git可以管理的仓库。目录下会多一个.git的目录,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。【只能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化】
git add readme.txt | 将文件添加到暂存区里面去 |
git commit -m"提交记录说明" | 告诉Git,把文件提交到仓库 |
git status | 可以查看是否还有文件未提交 |
git diff readme.txt | 查看某文件改了什么内容 |
2:版本回退
git log | 查看下历史记录(最近到最远的显示日志) |
git log –pretty=oneline | 避免日志显示太繁杂 |
git reset --hard HEAD^ | 回退到上个版本 |
git reset --hard HEAD~100 | 回退到前100个版本 |
git reflog | 获取到版本号 |
git reset --hard 版本号 | 回退到指定版本 |
3 工作区与暂存区
工作区就是在电脑上看到的目录,工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。
Git提交文件到版本库有两步:
第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。
第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。
4 Git撤销修改和删除文件操作
撤销修改:
第一:如果我知道要删掉那些内容的话,直接手动更改去掉那些需要的文件,然后add添加到暂存区,最后commit掉。
第二:我可以按以前的方法直接恢复到上一个版本。使用 git reset --hard HEAD^
第三:git checkout --readme.txt 工作区做的修改全部撤销。【注意:命令git checkout -- readme.txt 中的 -- 很重要,如果没有 -- 的话,那么命令变成创建分支了。】
删除文件:
一般情况下,可以直接在文件目录中把文件删了,或者使用rm命令:rm b.txt ,如果我想彻底从版本库中删掉了此文件的话,可以再执行commit命令提交掉。只要没有commit之前,如果我想在版本库中恢复此文件如何操作呢?【git checkout -- b.txt】
四 :配置gitlab上的ssh:
SSH(Secure Shell)是一种安全协议,在你的电脑与GitLab服务器进行通信时,GitLab使用SSH密钥(SSH Keys)认证的方式来保证通信安全。创建 SSH密钥,并将密钥中的公钥添加到GitLab,以便我们通过SSH协议来访问Git仓库。
使用Git Bash: ssh-keygen -t rsa -C "YOUR_EMAIL",然后连续按2次回车。即可生成新的SSH,会看到私钥id_rsa和公钥id_rsa.pub这两个文件,私钥文件id_rsa的信息自己留着就可以了。然后我们将id_rsa.pub公钥信息复制进入Gitlab的Profile Settings.
五:将本地仓库和远程仓库同步
1 将本地仓库的资源放到远程仓库上
在gitlab上将仓库建好后,在GitHub上的这个仓库还是空的,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,把本地仓库的内容推送到GitHub仓库。此方法是将本地仓库同步,
首先自己与origin master建立连接git remote add origin git@gitlab.com:caoshaojun/caosj_project.git
git push -u origin master(由于新建的GitHub仓库是空的,所以第一次推送master分支时需要加-u参数,以后再推送就不用加了)从现在起,只要本地作了提交,就可以通过命令:git push origin master把本地master分支的最新修改推送到github上了,现在你就拥有了真正的分布式版本库了。
2 将远程仓库的资源拉取到本地
a 新建文件夹,用gitbash ,基础配置,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中,使用下面两条命令:
git config --global user.name "你的名字或昵称"
git config --global user.email "你的邮箱"
b git init
git remote add origin <你的项目地址> //注:项目地址形式为:https://gitee.com/xxx/xxx.git或者 git@gitee.com:xxx/xxx.git
c git clone <项目地址>
六 :分支合并相关
理解分支合并的原理:个人觉得此片文章写的非常详细{特别是分支合并的原理理解很有用}【https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6】,这里总结一下原理,首先要知道git 存储的是快照,就是提交后git保存的是一个个提交对象,指向这些快照的指针就可以看作是一个个分支,快照你就想象成照片,保存了不同时期的状态和东西,但是保存起来很方便,建立的分支就好比在不同的快照基础上往下开发,合并分支就好比把不同的开发东西又合到一起来。分支合并只是一个指针的变化。
相关操作:建立分支$ git checkout -b iss53
相当于 $ git branch iss53【建立分支】 $ git checkout iss53【切换分支到iss53上】,
合并分支:$ git merge hotfix【将hotfix分支合并到当前head的分支上来】
删除分支:$ git branch -d hotfix 【合并完的分支没有用处了就可以删除了】
合并的原理有两种情况:详见上一点的链接。
七 :冲突解决
1 合并分支的时候,将冲突的文件找出来,冲突的地方会有版本提示,修改完只有一个版本的时候,再提交。
2 希望服务器上版本完全覆盖本地修改,使用如下命令回退并更新 git reset --hard git pull
3 git pull 出现冲突后丢弃本地冲突文件修改,采用远程文件覆盖本地文件git checkout [文件路径]
例:git checkout test/src/main/resources/spring-shiro.xml
4 git pull 出现冲突后可以暂存本地修改git stash ,然后git pull 更新代码,git stash list 可查看暂存记录列表,释放本地暂存 git stash apply stash@{0} ,出现冲突文件,找到并解决,然后可以提交git add . 加入索引库,然后本地提交git commit -m '注释' 最后git push到远程
关于冲突的解决还是得到具体项目里去联系才能用的比较熟悉。