本文简单描述git分布式版本管理与svn集中式管理的区别,看到标题你就知道,本文我主要来介绍git常用的功能与常见问题的处理方式。
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
https://jingyan.baidu.com/article/7f766dafba84f04101e1d0b0.html
下面提供一个链接教程
https://blog.csdn.net/qq_38723394/article/details/80305245
首先创建一个空目录
$ mkdir learngit //新建目录
$ cd learngit //进入这个目录
$ pwd // 显示当前目录
/Users/michael/learngit
初始化这个目录变成Git可以管理的仓库
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/ //仓库成功并且告知是一个空的仓库
// 克隆远程master
git clone git仓库地址
// 克隆远程指定分支(如:dev)
git clone -b dev git仓库地址
// 第一种方法
git branch //创建分支
git checkout 分支名 //切分支
//第二种方法
git checkout -b 分支名 //创建该分支并切换分支
第一步,把文件添加到仓库
$ git add 文件名
$ git add . //把所有的文件都添加仓库
第二步,把文件提交到仓库
$ git commit -m "本次提交的说明"
为什么Git添加文件需要add,commit一共两步呢?下面再解释
新建的文件夹learngit就是一个工作区
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
查看仓库当前的状态,可以确认有没有需要提交的修改
$ git status
查看修改的内容
$ git diff 文件名
查看提交的日志,输出版本号,作者,日期和提交信息
$ git log
git checkout – file可以丢弃工作区的修改:
$ git checkout -- 文件名
命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
创建一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
首先,我们创建dev分支,然后切换到dev分支:
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后,用git branch命令查看当前分支:
$ git branch
dev
master
git branch命令会列出所有分支,当前分支前面会标一个*号。
然后,我们就可以在dev分支上正常提交
$ git add readme.txt
$ git commit -m "branch test"
[dev fec145a] branch test
1 file changed, 1 insertion(+)
现在,dev分支的工作完成,我们就可以切换回master分支:
$ git checkout master
Switched to branch 'master'
切换回master分支后,刚才提交的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变:
现在,我们把dev分支的工作成果合并到master分支上:
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
合并完成后,就可以放心地删除dev分支了:
$ git branch -d dev
Deleted branch dev (was fec145a).
删除后,查看branch,就只剩下master分支了:
$ git branch
master
如果master分支和dev分支各自都分别有新的提交,就会出现冲突:
这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突:
$ git merge feature1
git status告诉我们冲突的文件:
$ git status
可以直接查看冲突的内容,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改后保存
再提交:
$ git add readme.txt
$ git commit -m "conflict fixed"
现在,master分支和feature1分支变成了下图所示: