人生的上半场打不好没关系,还有下半场。
文章目录
前言
一、git概念
git是分布式版本控制工具。除了有git还有svn和cvs等这样的版本控制工具;区别在于集中式每次写代码都要从服务器拉下来,本机只保存当前版本,服务器丢失,所有版本都丢失;分布式是每个人都能获取到项目中所有版本。
二、git怎么使用
git有用其他集中式分布版本控制系统没有的暂存区,同时拥有工作区,版本库,远程仓库;这几个的关系好比你从家里坐电梯上天台,你的家就是工作区也就是当前的工作目录,缓存区就是电梯口,进入电梯的过程就是提交到版本库(版本库可以记录提交的版本,好比迪阿尼有监控),提交的过程就是坐电梯,天台就是远程仓库。
1.添加文件到暂存区(从家走到电梯口)
git add 文件名 将当前指定文件添加到暂存区
git add --all 将当前目录下包括所有的子文件中被改动的文件都提交到在暂存区
git add . (这里有个点.)同样是将当前目录下所有的子文件中被改动的文件都提交到在暂存区,但是和git add --all的区别在于:在工作区删除一个文件a之后git add --all会记录下这个操作,然后在提交的时候在仓库中同时删除这个文件,但是git add .不会记录删除操作。
2.将文件提交到版本控制库(走进电梯里面):git commit -m '注释'(tu)
言简意赅描述本次提交的描述信息,方便以后回滚和查阅,commit的时候会生成40位的哈希值作为id将刚刚add到缓存区的代码提交到版本库里;
3.修改刚刚提交的注释:git commit --amend
如果觉得刚刚的提交的注释不够好,可以用git commit --amend进行修改,输入该指令后会进去如下页面:
期中second commit是你上次提交的描述,下面是一些说明信息,告诉你上次提交的文件信息等,可忽略不看,要是想修改信息,可以按键盘i键,此时进去了输入模式,变成这样,
可用键盘上下键转到描述所在的那一行,然后进行修改:
修改完成后,按下 Esc键退出编辑模式,在键入 :wq 回车退出并保存修改,完成提交。这时可以用git log查看提交日志。可以看到提交信息已经被修改了,但是版本号并没有被修改,而是直接改写了注释。
3.git log 查看提交日志
上面说过,提交相当于走进电梯的过程,git log就相当于查看电梯监控,参数分别代表一下含义:
commit 后面跟着的是哈希算法生成的id head指向那个分支就代表提交到哪个分支的仓库,比如下面就是指向master分支仓库。
Author:提交作者 Date:提交日期 +0800是代表当前是以格林威治时间作为基准。
4.提交之后想撤销到上一次提交的状态:git checkout --file
checkout有切换的功能,可以用来切换分支。但是此处用来撤销修改用,但是只能切换到上一次提交的文件状态,要是提交之后又修改了但是还没提交,也只会回到上一次提交的状态。但是只能撤回到当前的版本的前一版,不能提交到当前版本前前版本以及前前前前版本。
5.git log 文件名 查看该文件可回滚版本
6.git reset --hard 回滚代码仓库
a.reset重置命令 --hard重置代码仓库版本,这里有三个可选恢复等级
--soft、--mixed、--hard
如果 指定--soft
工作区的状态更改保持不变,暂存区域未更新(所有先前提交的更改都将为下一次提交而暂存)
提交到版本库的代码退回到暂存区;
如果使用参数(默认值):–mixed
工作区中的更改保持不变,暂存区域设置为新的 HEAD(不暂存文件),原始提交和您重置的提交之间的文件更改在工作区中显示为修改(或未跟踪的文件)。
如果指定了参数:–hard
将暂存区域和工作树重置为新的 HEAD。这将有效地删除您在原始提交和重置到的提交之间所做的更改。
简单来说就是--soft将状态退回暂存区域,--minxd将状态退回暂存区之后,暂存区的代码代码也不暂存了,--hard 在上面的基础上将工作区的代码也回退
b.回滚到指定历史版本
先使用git log查看历史版本,拿到commit后面的字符串id
再使用git reset --hard 要回滚的id
c.回滚当前仓库指向的版本库
当我们需要迭代当前仓库的上一个仓库时,git reset --hard HEAD^
HEAD指向当前仓库版本,^表示上一个版本,回滚上多个,比如回滚上三个git reset --hard HEAD~3
7.查看提交之后文件状态动 git status
status查看当前仓库状态
可以看到当前仓库文件的状态
8.拉取并合并远程分支:git pull
git pull 命令用于从远程获取代码并合并本地的版本。
git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。
命令格式如下:
git pull <远程主机名> <远程分支名>:<本地分支名>
实例
更新操作:
$ git pull $ git pull origin
将远程主机 origin 的 master 分支拉取过来,与本地的 develp分支合并。
git pull origin master:develop
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin master
9.从将本地的分支版本上传到远程并合并:git push。
命令格式如下:
git push <远程主机名> <本地分支名>:<远程分支名>
如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
实例
以下命令将本地的 master 分支推送到 origin 主机的 master 分支。
$ git push origin master
相等于:
$ git push origin master:master
如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数(不建议使用):
git push --force origin master
删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支:
git push origin --delete master
10.git切换分支:git checkout 分支名
比如本地有develop分支,git checkout develop 会切换到该分支,要是本地没有该分支,可以使用git checkout -b develop会创建一个新的本地分支develop并且切换到develop
11.gitflow 分支流
在多人开发的项目中,只在一个分支上开发肯定是不行的,这样提交代码到仓库里除了容易导致代码冲突,还容易导致仓库代码乱七八糟,因此git有专门的流程
先介绍git有哪几个分支:
其中master、develop为永久分支,feature、release、hotfix为临时分支
1.master分支 存放开发完,测试完成的代码,永远都是可以发行的状态
2.develop 需求分配后的分支,开始由master分离而来,存放基本稳定的代码,当该分支稳定到可发行状态后,合并到master分支
3.feature分支 开发人员在上面开发的分支,由develop分支分离来,一般以feature/XXX或feature-xxx命名,项目人员在上面开发,开发完成之后,合并到develop,删除改分支
4.release分支 开发完后的测试分支,版本预发布分支,当v1.0版本发布时,可以从develop分支签出release-1.0,进行测试,测试出现问题,在release-1.0进行修改,测试完毕后准备发布将代码合并至master分支和develop分支上,给master打上v1.0的标签,合并后删除自己,这样做可以不影响下个版本功能的开发。
5.hotfix 项目上线后的紧急修复分支 修复完成后合并到master和develop分支,命名为hotfix-xxx,合并到master后打上修复版本的tag,合并后删除自己。
总结
git传代码之前一定要拉取一下,防止代码冲突哦~