git详解指南
写在前面的话
本文是对本博客git分类中的几篇文章的总结,和GTB(TW应届生培训)中涉及的新知识进行总结。
博客git分类请点此处跳转。
什么是git
git是目前世界上最先进之一的分布式版本控制系统。
用git的好处
最直接的例子就是,学校里要求我们几个同学组成一个团队开发大作业,如果不用git等版本控制系统,我们每次更新项目就是把整个项目文件压缩,然后微信传来传去。备份也是压缩然后起不同的名字,然后传来传去。是真滴烦!最重要的是,版本混乱,仅靠名字标识项目的改动,多人团队开发还要手动代码合并。这好比于用指甲钳去砍树,蛋疼!
git和github
git是一个版本控制系统,简单来说就是个软件,用于记录一个或若干个文件内容变化。
github是一个为用户提供git服务的网站,提供代码以及其他资源的存放,同时也是世界上最大的开源社区(基友网站)。
git的安装指南
先下载安装包,官网——https://git-scm.com,会比较慢,建议使用魔法,本人下了半个钟
点击download即可,直接运行exe安装包
每一步都是默认next,完成安装后桌面右键出现git选项即为安装成功
git配置ssh
git的四个区域
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下
工作区可以说就是我们的本地项目文件区,我们在这个区编码
暂存区可以理解为缓存,暂时存储已经修改文件的地方
repository区就是我们的仓库区了,在这里可以看到我们每一个版本,且对他人可见
本地仓库的配置和初始化
在桌面点击git bash here,进入git命令行界面
通过这两行命令配置git的用户名和邮箱,注意如果要和github联合使用的话建议使用github的用户名和邮箱
接着我们就可以创建/初始化仓库了
我们在桌面新建一个文件夹,这里叫pro_git,代表我们的仓库目录,可以用windows邮右键的方式创建,也可以直接用命令行mkdir 名字的方式创建。
然后我们使用cd pro_git命令进入目录,接着输入git init初始化仓库,在pro_git目录下看见一个隐藏文件夹.git代表仓库初始化成功了
ADD操作
add操作代表我们将文件纳入缓存区
我们可以使用git add指令添加若干个文件进入我们的缓存区
•语法1(一个文件):git add 文件名
•语法2(多个文件):git add 文件名1 文件名2 文件名3 ...
•语法3(整个目录):git add .
纳入缓存区之后意味着这些文件有机会成为一次本地仓库的提交记录,即有机会留下一个可以被回溯的记录点
COMMIT操作
commit操作代表我们将缓存区里的文件提交到本地仓库,并形成一次提交记录
•语法:git commit -m "注释"
回退操作
当你误删了文件或进行了误操作,导致项目损坏时,就可以考虑版本回退(回滚)。
版本回退分为两个步骤,分为:先查看版本,确定需要回退的时刻点;使用指令进行回退。
查看版本
使用 git log 命令展示每次commit的序列号、提交人、邮箱和时间等信息
或者使用 git log --pretty=online 命令仅列出版本号和提交时的注释
进行回退
当你知道你想回到的版本的版本号后,就可以使用 git reset --hard 版本号 命令进行版本回退
回退错了怎么办
如果现在是版本4,我想回退到版本2,但发现回退错了,回到了版本1
此时再用git log命令查看版本已经没有2到4的版本号了,因为上面两条命令只查看当前版本及以前的版本的版本信息
此时就必须用 git reflog 命令查看历史操作,以得到之后的版本号,然后再通过 reset 命令进行回退
远程仓库操作
很多时候你的代码是放在像github、gitee等远程仓库进行管理的,我们可以将远程仓库里的代码拷下来,又或者是用本地仓库的新代码去更新它
克隆远程仓库至本地仓库
windows下右键进入git bash,使用 git clone 地址 命令将远程仓库clone到本地
这里的地址就是在github上直接复制的,使用https形式后续push要验证账号和密码,ssh则不用
更新本地仓库
你昨天将仓库clone下来后,你的同事改动了远程仓库,你想要将这些改动同步到你的本地仓库
就可以使用 git pull 命令更新你的本地仓库
更新远程仓库
你下班前终于完成了今日的需求,你想把最新的代码更新到远程仓库
就可以用 git push 上传至远程仓库
配置git命令别名
如果你觉得git的命令敲起来很麻烦,可以去配置.gitconfig文件为命令创建别名
在你的配置文件新增alias配置即可,等号左边是别名,右边是真实命令,例如
[alias] a = add cm = commit -m d = diff dc = diff --cached l = log --oneline --decorate --graph
这里是少部分命令演示,配置后可使用别名完成命令,例如
git cm "feat:test log"
git的分支管理
真正的项目不只有你一人开发,开发人员变多,项目工作内容也会细分
比如我们要开发一个商城系统,分为很多模块:用户模块、管理员模块、物流模块等
由不同的开发小组完成开发任务,每个小组做好之后整合在一起,那怎么用git进行版本管理呢?
在每次提交之后,git会把每次的版本串成时间轴,这个时间轴就是一个分支,我们称之为main/master分支。
在实际开发中,只有一个分支是无法满足开发任务的,如果想满足多人开发任务、在分支上开发的工作不会影响其他分支的正常使用,git鼓励开发者使用分支完成开发任务。
分支的常见指令:
查看分支 | git branch |
创建分支 | git branch 分支名 |
切换分支 | git checkout 分支名 |
删除分支 | git branch -d 分支名 |
合并分支 | git merge 被合并的分支名 |
创建并切换分支 | git checkout -b 分支名 |
注意删除分支时要退出当前分支,git push只会上传当前分支的内容
冲突管理
上文没有提及到的是无论是仓库的更新还是分支的合并,对同一文件的不同内容该选谁呢,git的是不知道谁走谁留,所以就产生了冲突,当发生冲突的时候会提示你发生文件冲突
使用 git status 命令查看哪个文件发生了冲突
打开该文件可以看到git对该文件进行了带格式的编辑,其中小于号到等号的内容为当前分支的内容,等于号到大于号为别的分支的内容,我们更正好冲突即可
借助图形化工具使用Git
当你觉得git bash的黑白框很难看时,很多图形化工具就给你带来了便利
当然IDEA等软件已经提供了强大的按键式管理途径,但你又不喜欢的话
我推荐你使用gitkraken,虽然没有进行深度使用,但别的不谈,它好看呀
这么好看的图形化工具谁不爱呢,详细介绍和教程请移步至我的这篇博客和这篇博客(还没写完)
总结
本文只是对git有一个初步的、才疏学浅的总结,像一些命令的参数,比如push命令可以指定remote和它的分支也没有详细展开,比较详细的教程请参考廖雪峰的GIT教程,菜鸟GIT教程
以及比较好玩的learngitbranching网站和git的一些骚操作