前言
本文章首先讲解如何创建仓库并提交项目文件,再讲解了如何创建分支进行开发,再讲解了出现文件冲突如何解决.最后再讲解了如何回退到历史版本
一.基本操作:创建仓库,提交文件
创建服务端仓库
在git官网新建一个仓库:git-test
创建本地仓库
进入需要创建的文件夹,我是创建在本地目录git-test下
注:以下命令不需要分号,加冒号是因为 ;// 这样写后面的注释才能变色
cd aProject/git-test ;//进入git-test目录
git init ;//初始化一个仓库,会在目录下产生一个.git文件夹
//使用命令git remote add origin git@github.com:yourName/yourRepo.git
;//Mrlgj为你的git用户名,git-test你在git上创建的远程仓库
git remote add origin git@github.com:Mrlgj/git-test.git ;//创建本地仓库,仓库创建完成
创建文件
在该目录下使用vim创建一个文件file1,也可以右键点击新建文件.并编辑,如图.
vim file1
上传文件
git add . ;//提交到索引库,执行该命令后不会有任何提示
git status ;//可用该命令查看,有哪些更新
添加注释并提交
git commit -m "新建了一个文件file1"
git commit -m "新建了一个文件"file1" ;//提交本地仓库到远程仓库
查看提交结果,进入个人git主页的git-test仓库,可以看到刚才提交的内容,谁提交以及注释.
二.创建分支
Master 主分支
首先,代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。Git 主分支的名字,默认叫做 Master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发
为什么要创建分支
建立分支的原因是 git 因为是分布式的,所以其核心就是分支,分支的意义在于,可以将项目代码按照功能、模块拆分成不同的分支。比如这个产品要加一个支付功能和一个登陆功能,可以创建两个分支,交给不同的开发人员并行开发。登陆功能先开发完,测试无误后合并改分支到 master 分支,master 分支部署上线。支付功能虽然没有开发完成,但是在另一条分支上,所以产品上线和功能开发完全不受影响。这才是分布式开发的高效模式。还有这样,以自己名字建立一个分支比如 xiancai,这个分支是已经做好的功能,随时可以合并到 master 上线,开发的时候,建立一个带功能前缀的分支,比如 xiancai-ninghao 、xiancai-ninghao 等等,开发完之后在合并到 xiancai,每次上线,把 xiancai 合并到 master 。总之分支的做重要的意义就是提高效率!!! 这样方便团队开发,并且不会导致混乱.
还有一种场景是,你在新的分支上正在实现一个新的功能,还未完成,如果此时主分支master出现一个紧急bug,需要修复,这个时候就可以切换会主分支,在主分支上直接修改或者新建分支进行修改,最后再进行提交.这样新功能开发和bug修改就不会互相影响.
需要注意的问题
文件冲突:比如A开发人员修改了文件file-A,并提交到master主分支,B开发人员在A提交之前也修改了同一个文件file-A,这个时候B提交就会出现问题,后面再讲怎么解决.
方式1:创建新的仓库
按照上面的操作创建新的仓库,在git-test1文件夹中创建新的仓库
从远程仓库拉取文件
git pull origin master ;//拉取文件
方式2:使用git clone命令获取
git clone会获取到整个项目文件,包括仓库,已建分支.可以代替上面的创建仓库,以及pull操作,建议使用该方式.
git clone https://github.com/Mrlgj/git-test.git
创建分支
创建名为branch-1的分支,执行后会提示Switched to branch ‘branch-1’
git checkout -b branch-1 ;//创建分支branch-1
在分支上进行修改
比如添加一个文件file3,并编辑内容
分支提交
git add .
git commit -m "branch1创建file3"
合并到主分支master
git checkout 分支名称 --> 跳转分支
git merge 分支名称 --> 与该分支合并
git checkout master ;//跳转到master
git merge branch-1 ;//master与分支branch-1合并
提交到远程仓库
git add .
git commit -m "branch-1创建file3,合并 到主分支,提交"
git push origin master
注意此次提交的注释是分支提交的注释,而不是提交主分支时的注释
至此,分支操作完成.
切换分支时出现的问题
在一个分支上操作之后,如果还没有将修改提交到分支上,此时进行切换分支,那么另一个分支上也能看到新的修改。这是因为所有分支都共用一个工作区的缘故。
解决办法:
方法1.提交后再进行修改,git add . 和git commit -m “注释”
git add .
git commit -m "注释"
git checkout master ;//切换分支
方法2.可以使用 git stash 将当前分支的修改储藏起来,此时当前工作区的所有修改都会被存到栈上,也就是说当前工作区是干净的,没有任何未提交的修改。此时就可以安全的切换到其它分支上了
git stash ;//保存修改
git checkout master ;//切换分支
删除分支
如果分支上的功能已经完成,可以删除分支
git branch -d branch-1 ;//删除分支branch-1
二.文件冲突解决
存在一种情况是,两个开发人员同时pull项目,并都对其中的文件A进行了修改,最后提交的那个人便会办报错
也就是出现了文件冲突,导致无法提交.
A开发修改file1并提交
B开发修改file1并提交
报错,无法提交
解决办法
向服务器拉取文件
git pull origin master
可以看出这里提示了file1存在冲突
打开file1,可以看到对冲突的地方进行了提示,
其中<<<<<<< HEAD 和 ======之间的内容是本地修改后提交的
======和>>>>>>> a9ae75707f60ece6b2fd564d437791e383804f6d
解决:去掉这些注释,修改好文件(需要和之前修改的人员进行沟通,避免出现误操作),再次进行提交就不会报错.
回退版本
查看历史版本
git log ;//查看历史版本
版本回退,选择要回退的版本的那一长串编码
git reset --hard a9ae75707f60ece6b2fd564d437791e383804f6d ;//会退到该编码对应的版本
其他
git clone和git pull的区别
git clone是把整个git项目拷贝下来,包括里面的日志信息,git项目里的分支,你也可以直接切换、使用里面的分支等等
git pull相当于git fetch和git merge。其意思是先从远程下载git项目里的文件,然后将文件与本地的分支进行merge。