Git-分布式版本控制系统
一、版本控制
版本控制系统是记录若干文件内容变化,以便将来查阅修订特定版本或还原部分文件的系统
分为:集中式版本控制系统(svn)简称cvcs 都有一个单一集中管理服务器,保存所有文件修订版本,开发人员通过客户端连到这台服务器,取出文件或提交更新。会出现中央服务器单点故障!
分布式版本控制系统(Git)简称dvcs 没有”中央服务器“,每个人的电脑上都是一个完整的版本库。安全性更高!但分布式版本控制系统中会有一台充当”中央服务器“的电脑,方便交换修改。
有极其强大的分支管理工具!
二、Git帮助与初始化
$git help 显示git的帮助信息
$git help-a 加上-a参数可以显示所有帮助信息
$git help add 加上具体命令可查看详细帮助内容
$git config --list 显示git的配置信息
$git config --globol user.name"sunyi" 设置Git的用户名
$git config --globol user.email"963807896@qq.com" 设置Git的E-mail
--globol 表示设置的范围(系统,项目,全局)
$git config --unset--globol user.name 修改前需要--unset参数清空需要修改的设置
$git init 使用init命令可以初始化一个仓库(repository),同时在当前目录下生成一个用来跟踪管理版本库的的.git文件夹*避免使用含有中文的路径。
三、 创建版本库
在git的目录下添加一个有内容的文本文件
$git status 查看当前仓库工作区的状态
$git add 将新文件添加到仓库
$git commit 将新文件提交到仓库 $git commit -m”提交本次的说明,方便找到改动记录“ Git完整的添加文件需要先add再commit两步。
四、本地的版本控制
给文本文件添加一行文本 先查看状态,提示被修改过,但还没有被准备提交的的修改
$git diff 查看具体修改内容 查看完修改后,经过add和commit将修改添加到版本库
2> 版本回退
$git log 查看commit的记录 记录中有提交的作者,email和提交时间以及commit时输入的-m参数后的文本。其中commit后边的数字表示commit id(版本号)是一个SHA1计算出来的非常大的数字,用十六进制表示。
$git reset--hard HEAD^ 退回到上一个版本 首先要知道当前版本 用HEAD表示当前版本 上一个版本就是HEAD^, 上上一个就是HEAD^^ ,往上100个可以写HEAD~100
$git reset--hard ID 4da437f 放弃回退 必须知道恢复版本的ID号 ,因为git log只存储最后一次版本之前的版本记录 所以需要git reflog来找回之前的版本号
$git reflog 用来记录用户输入的每一次命令。找回版本号并且撤销回退。 *版本号写前几位即可,Git自动查找
3> 工作区和暂存区
工作区即当前目录下除了.get文件夹下的其他目录
版本库即.get文件夹下的东西,其中最重要的就是stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD。
将文件添加到Git版本库的时候分两步执行,首先git add把文件添加进去,实际上就是把文件添加到暂存区,然后git commit提交更改,实际上就是把暂存区所有内容提交到当前分支
4> 撤销修改
撤销修改分为三种情况:仅修改了工作区的内容,未添加到暂存区(没有经过add和commit的修改);此时工作区提示有一个修改;$git checkout 文件名,可以还原工作区修改。
修改了工作区的内容并添加了暂存区,但未提交修改(经过add但未commit的修改);$git reset HEAD 文件名,可以还原暂存区的修改。再使用checkout命令还原工作区。
修改被添加到暂存区并且提交了修改(经过add和commit的修改);此时只需要退回版本即可,$git reset--hard HEAD^ 。
5> 删除文件
在Git中删除也属于修改操作,在工作区手动删除文件之后,工作区和版本库的文件就一致了,Git会发现用户删除了文件,并且告诉用户哪些文件被删除了
删除文件有两种方法:在工作区删除文件,然后使用git rm 并且commit 执行git rm之前的删除文件操作仅仅修改工作区,并不会将删除操作添加到暂存区,可直接用checkout命令撤销操作即可
在Git中直接使用 git rm 命令删除文件并 commit 在commit之前,删除操作会同时操作工作区和暂存区,在撤销时先使用reset命令,然后再使用checkout命令撤销操作。
五、 远程仓库
1> 生成SSH Key
$ssh-keygen-t rsa 使用RSA 方式加上时间参数来生成SSH秘钥,使用默认设置即可。
成功后可以在用户主目录下找到.ssh目录,里面有id_rsa和 id_rsa.pub两个文件,其中id_rsa是私钥,不能泄露!!!id_rsa.pub是公钥文件,可任意发送。
将生成的id_rsa.pub文件发送给服务器管理员,管理员在服务器将公钥注册以后,此计算机即可通过服务器验证,进而下载上传文件。请保证id_rsa文件安全!!!
2> 远程下载项目代码
使用git init 创建一个新仓库,然后git pull可以远程下载项目代码,(或者直接使用git clone命令拷贝版本库至本地)。
首次使用Git连接服务器时,会有一个警告,ssh连接第一次验证服务器的key,输入yes回车即可。这个警告只出现一次。
3> 推送代码至服务器
git push 将当前分支推送至服务器。
六、分支管理
1> 创建与合并分支
分支管理命令 git branch 查看当前分支
git branch 名称 创建分支
git checkout 名称 切换分支
git checkout -b 名称 创建加切换分支,git会在当前分支前加*
git merge 名称 合并某分支到当前分支
git branch -d 名称 删除分支
2> 解决冲突
git status 告诉我们冲突文件
git用<<<<<<<,=======,>>>>>>>标记不同分支的内容,修改解决冲突后保存,再提交即可成功合并。
用带参数的git log 可以看见分支合并情况
git log --graph --pretty=oneline --abbrev -commmit
git stash 把当前工作区”储藏起来“,等以后恢复现场后继续工作,使用之后,当前工作区状态是干净的
3> bug分支
git stash apply 恢复工作区现场,不删除stash内容
git stash drop 手动删除stash内容
git stash pop 恢复工作区现场,同时删除stash内容
七、自定义配置
1> 标签
git tag 名称 添加新标签
git tag 查看所有标签
git show 名称 查看对应标签的详细提交信息
2> 忽略文件
git ignore