git基本概念
git和是svn的对比
- git是分布式版本控制系统,svn是集中式版本控制系统,而两者的区别是:集中式的版本库
存放在中央服务器,如果是服务器在外网,速度会比较慢。而分布式没有中央服务器,每个人的电脑都是一个完整的版本库,就不需要去联网,而且相比集中式他的安全性要高很多,因为每个人的电脑都一个完整的版本库。
一些概念
- 工作区:就是代码的存放的目录
- 版本库:就是那个.git文件,里面有很多东西,其中最重要的是暂存区(stage),还有git自动创建的第一个分支(master),以及指向master的指针(HEAD)
git配置
git安装好后的配置
git config --global user.name "Your Name"
git config --global user.email "Your Email"
这是全局配置git的配置,global参数是全局的意思
git基本命令
创建版本库
touch gitDir
cd gitDir
git init
git init命令是将该目录变成一个版本库,执行成功后会在版本库中衍生出一个.git,当然如果看不到git,要么失败了,要么没有显示出来。
add 和 commit
git add readme.md
git commit -m "Commit Message"
- add是将文件添加到仓库缓冲区
- commit是将add之后的文件提交到仓库中,-m是提交时写的备注,所以需要add再进行commit,如果在项目开发过程中,需要对文件频繁操作,可以add->add->...->add->commit
status 和 diff
git status
- status会显示当前仓库的状态
- diff是显示文件和版本库中的文件的不同的地方
版本回退
git log
git reset --hard HEAD^
git reset --hard 具体版本号
git reflog
- git log 是查看提交的版本历史
- reset 回退 HEAD^回退到当前版本的上一个版本
- 回退到具体的某一个版本,但是要知道版本号,就是log返回的
- git reflog会返回每一个操作的日志,这样可以反悔一些东西,比如回退后,想再回到最新的版本,就可以找到版本号。
- git的回退的原理,git管理着每一次的修改,当前版本就是用指针指向该版本,如果想回退版本,只是将指针指向该修改
撤销修改
git checkout -- readme.md
- 这句话的意思就是将文件在工作区的修改全部撤销,-- 必须带,不带就是切换到另外一个分支
- 一种是文件修改后没有add到暂存区,执行后会回到和版本库的文件一模一样
- 另一种情况是文件已经add到暂存区了,而且后面又修改了,执行后会回到add到暂存区后的状态,也就是说,不会撤销暂存区的内容,只会撤销工作区的修改。
- 但是如果想撤销已经add到暂存区的内容,需要先git reset HEAD file,再执行git checkout -- file。
删除文件
git rm readme.md
git commit -m 'Delete file'
远程仓库
从远程克隆一份到本地
git clone https://github.com/michaelliao/gitskills.git
git 支持多种协议,包括https,但通过ssh支持的原生git协议速度是最快的。
分支管理
创建分支
git branch dev
切换分支
git checkout dev
创建新分支并切换到该分支下
git checkout -b dev
列出所有分支列表
git branch
合并分支
git merge dev
- 在当前分支下执行,会将dev分支合并到当前分支,可能合并时会出现冲突的情况,所以需要先解决冲突,再add,再commit
保留合并信息的合并分支方式
git merge --no-ff dev
- 添加--no-ff表示普通方式合并,合并后保存合并历史。而fast forwardh合并就看不出来曾经合并过
删除分支
git branch -d dev
- 如果一个分支还有没有合并的修改,使用-d是删除不了的,-D为强制删除,没有合并的修改的分支可以删除,但是删除了之后不能恢复,所以需要谨慎操作
bug分支
在git里面如果遇到bug需要修复,一般思路是从主线上衍生出一个bug分支,在bug分支上作出修改,然后在主分支上合并这个bug分支的内容,然后删除bug分支,
git checkout -b bug-001
修改文件...
git add file
git commit -m "内容"
git checkout master
git merge --no-ff -m "说明内容" bug-001
git branch -d bug-001
以上是你没在开发的时候分支开发的步骤,如果你在开发分支(dev),开发到一半,一个bug过来需要修复,此时这个版本开发不能提交,因为还没有测试,此时就需要将你的开发分支"储藏"起来
git stash
此时用git status就不会有任何改变,因为这个分支上的任何修改已经被隐藏起来了,就可以执行上面的bug修复的步骤,在完成之后,将开发分支的恢复
git stash list #这是查看储藏的列表
git stash pop #恢复后删除list
git stash apply #删除后不删除list
Feature分支(用于新功能开发)
- 操作和bug分支类似。
远程库相关
查看远程库的信息
git remote
- -v 查看详细内容
推送分支到远程
git push origin master(分支名称)
抓取分支
git pull
- 一般在推送到远程时,提示出错时,尝试git pull将远程的修改抓取下来,如果抓取报错,可能是因为本地分支没有与远程分支进行连接,尝试连接git branch --set-upstream dev origin/dev,再pull,如果同时pull合并出现冲突,需要先解决冲突,再通过push将代码推送到远程。
标签管理
创建标签
git tag <TagName>
- 对最新版本打标签,如果想对某一次提交打标签,可以在最后面添加commit id
指定标签内容
git tag -a <TagName> -m "TagContent"
删除标签
git tag -d v1.0
- 上面命令是将本地v1.0标签从本地删除,如果标签已经推送到远程,需要先将本地的标签删除后,再将远程的标签删除,命令:git push origin :refs/tags/<TagName>
将标签推送到远程
git push origin <TagName>
git push origin --tags
- 第一个命令是将某一个标签推送到远程
- 第二个命令是将本地未推送的标签全部推送到远程
git服务器搭建
这个自己实操即可