玩转git版本控制软件
一、git的基本介绍
1、什么是git?
git是个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。说白了就是个版本控制软件
2、git的使用方法
git软件是通过命令来实现管理的,git命令和linux命令类似,可以通过Linux命令方式来管理git
二、git命令基本介绍
1、版本上线需要用到的功能
1、使用pwd和cd命令进入到项目的所在目录(项目根目录)
2、git init
初始化当前项目目录即将当前文件夹初始化为版本库目录,初始化后,会在当前目录自动创建 .git 隐藏文件夹,该文件是Git中最重要的文件夹,因为Git相关文件以及版本都将保存在该文件夹中,有了它就可以记录多文件版本了,通过Git命令可以将所有版本保存在 .git 文件中,两条命令创建一个版本
3、git status
由于之前生成了个.git 隐藏文件夹,可以通过该命令来查看该文件夹的状态,如果项目文件代码被修改就会呈现红色字段,表示那个文件被修改
4、git add .
添加当前项目目录下所有的文件到版本库,这时查看.git文件夹内文件状态就是绿色可执行状态
5、 git commit -m "版本名称"
提交到版本库,并起名版本名称,以便后期回滚
注意:执行git commit 命令时,可能会提示进行用户和邮箱的配置,该配置用于记录当前版本由那个用户提交
git config --local user.name 'xuan'
git config --local user.email 'you@example.com'
6、命令总结
1、Git把管理的文件分为了两个区域四个状态。
2、工作区:当前开发程序所在目录称为工作区,即:工作开发程序都是在该目录,该区域的文件会有状态的变化且状态由git自动检测,如果程序中文件和文件内容做任何操作(增、删、改),文件状态均会被检测到,可以使用 【git status】命令查看。
3、版本库:工作区检测到有文件发生变化,那么意味着较上一个版本之后对程序进行了修改,修改完成之后,可以当做下一版本进行提交,那么就是执行 【git add .】 将所有文件提交到暂存区,然后再执行【git commit -m '又一个版本名称'】提交到版本库的分支即可,之后可以使用【git log】命令查看版本记录。
4、补充命令
1、git init,初始化,表示即将对当前文件夹进行版本控制。
2、git status,查看Git当前状态,如:哪些文件或文件夹被修改过、哪些文件或文件夹还未提交到版本库等。
3、git add 文件名,将指定文件添加到版本库的暂存状态(*代表当前文件夹内的所有文件,.代表当前文件夹)。
4、git commit -m '提交信息',将暂存区的文件提交到版本库的分支。
5、git log,查看提交记录,即:历史版本记录
三、git事物回滚方法
1、git reset --hard 版本号
通过该命令可以直接回滚到指定的程序版本,但是在此之间的版本信息就会被删除。
2、git reflog
可以通过git reflog
来查看被删除了的版本信息,并且可以通过git reset --hard uuid号的方式来恢复到被删除版本的当前位置
3、git stash
stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。说白了就是版本1之后的代码ok版本1之前的代码出现bug,就可以将版本1之后的代码先暂存在某个地方,然后恢复到版本1初始状态,修改完bug后再把版本1的程序重新git add . git commit -m 下最后吧版本1暂存的代码恢复回来
4、git stash pop
该命令是将程序暂存在某地的代码恢复回来继续开发但是当执行 git stash pop 命令时,可能会遇到冲突,因为在紧急修复bug的代码和通过stash存储在“某个地方”的代码会有重合部分,所以执行 git stash pop 时候就会出现冲突,有冲突解决冲突即可。而冲突区域git会显示处理冲突文件,冲突文件内的冲突代码也会显示出来,改就是了
5、git回滚命令总结
git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
git stash apply 编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
git stash list 查看“某个地方”存储的所有记录,因为一个git可能会多次stash
git stash clear 清空“某个地方”,可以一次性情况多个stash
git stash drop 版本号 删除指定版本号的记录
git reset -- soft 版本号 将分支程序代码回滚到缓存区
git reset -- mix 版本号 将分支程序代码回滚到修改内容区
git reset -- hard 版本号 将分支程序代码直接回滚到初始状态
git reset head 文件名 将缓存区文件回滚到修改内容区
git checkout 文件名 将修改内容区文件直接回滚到初始状态
四、git分支介绍
1、查看并创建一个分支
2、切换到分支上,开发新的功能
3、将分支版本提交到版本库中
4、切换到master分支,将dev分支内容合并到master分支
5、该分支的应用场景
注释:一般情况master分支代码是应用于线上,而dev分支是应用于线下代码开发,如果线上代码出现bug只需要重新开一个bug分支,修复bug然后提交到版本库即可,并不会影响到众多dev分支。
注意:git merge 时也可能会出现冲突,解决冲突的方式就是找到冲突文件,手动修改冲突并提交,此处不再敖述,冲突的原因有可能是master分支修复bug后并且线下dev分支开发完程序需要和线上master合并时出错。
注意:同一级别上创建的分支等级时一样的,也就是说master,bug,dev等分支都是兄弟关系。
6、分支命令
git branch 分支名称 创建分支
git checkout 分支名称 切换分支
git branch -m 分支名称 创建并切换到指定分支
git branch 查看所有分支
git branch -d 分支名称 删除分支
git merge 分支名称 将指定分支合并到当前分支
五、git代码托管软件
1、GitHub软件
一个基于Git实现的代码托管的平台,可以将内容以及版本记录在远程也保存一份,就相当于云盘,属于第三方软件,所有不够安全,平时放放自己写的代码就可以了千万别吧公司的代码放在上面。
2、GitLab软件
和GitHub软件功能一样,但这是公司内部自己搭建的软件,相对安全。
3、由于GitHub软件和GitLab软件的功能一样使用方法也一样,所有现在基于GitHub实现代码托管,需要以下步骤:
1、注册GitHub
略
2、创建仓库,如下图所示:
注释:创建完仓库后会有一个URL路径或者是ssh密钥登陆路径代指该仓库,
3、远程仓库创建好后设置公司git
注释:该命令作用是为地址起一个别名为s5day,方便后续使用
4、将公司本地的master分支代码push到仓库中,至此仓库就右一份我们自己的代码了
5、在家中可以将仓库中的代码先clone下来,然后编写代码提交到仓库中
注释:由于在公司提交的数据是master分支所有默认clone下来的就是master分支
6、第二天到公司需要吧仓库中最新的代码拉下拉并合并到本地,然后继续开发代码,最后上传到仓库
7、第二天晚上在家里将仓库最新代码拉下来,存放在版本库中,然后将版本库拉下拉的代码合并到工作区中
注释:长此以往,将Git和GitHub结合使用做到避免电脑损坏造成数据丢失以及多地开发的问题,上文执行过程中执行 【git pull master 分支】命令等同于【git fetch master 分支】+ 【git merge master/分支】,并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码有重合部分,那么就需要自己手动解决冲突然后再继续开发。
git rebase master/分支 === git merge master/分支,两者之间的区别是merge执行流程比rebase执行流程读取性能差,最终结果不变
4、通过GitHub实现程序员合作开发
1、合作者方式:将其他用户添加到仓库合作者中之后,该用户就具有向当前仓库提交代码。
2、组织方式:,创建一个组织,然后再该组织下可以创建多个项目,组内成员可以向组内所有项目提交代码。PS:也可以对某个项目指定合作者
5、通过GitHub中的Fork实现为其他程序员仓库中的代码修改bug即贡献代码
1、在自己仓库中找到想搞的项目,fork一下,然后这个项目就在自己仓库出现了
2、从自己仓库获取代码并进行编辑提交创建并提交一个pull request,然后等待原作者是否同意这个pull request,如果同意那么在作者的源代码中就推出现小P提交的功能
六、git补充内容
1、git相关配置文件(一共右三个配置文件)
系统配置: /private/etc/gitconfig
用户配置: ~/.gitconfig 全局配置文件
项目配置:.git/config 局部配置文件只是在局部项目中生效,比如说配置个项目的的路径别名就是在该配置文件下
2、用户免密钥登陆github
1、首先在git端生成一对密钥
创建一对秘钥 ssh-keygen -t rsa,然后将 id_rsa.pub (公钥)内容拷贝到github中,日后操作无需再输入用户名和密码。
注意:如果使用密钥登陆那么需要在git链接github库的时候使用github的ssh密钥方式链接。
3、git中忽略不必要的文件状态,意思就是说设置不需要git监听状态的文件
1、首先在当前项目目录下创建一个.gitignore文件,然后将需要忽略的文件添加到该文件内即可
2、匹配条件
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
"""a.*,test/[abc].py, [abc],test/*,!test/a.py,.idea/*, *.pyc, *.excel"""
4、一张图总结git与github