什么是GIT
git是一种版本控制系统,通俗来讲,就是帮我们把文件备份。但git版本控制系统的功能远不止备份这么简单,总的来说它具有如下特点:
- 文件缓存
- 记录历史
- 在缓存之间随时“穿越”
- 多端共享
- 团队协作
GIT并不是唯一的版本控制系统,除了GIT之外,常用的版本控制管理系统还有SVN,鉴于他们实现机制的不一样,通常我们称GIT为分布式版本管理系统,SVN是集中式版本管理系统。
那么分布式和集中式版本控制系统有什么不一样呢?
- 集中式的需要一台中央服务器,所有的代码管理,都交给中央服务器进行管理,一旦中央服务器挂了,就会影响所有的用户
- 分布式版本控制系统下的每一个节点,都可以充当服务器,每个节点自主管理存放在本节点上的文件。
- GIT比SVN的读取速度更快
git的工作是分区的,通过调用git相关的命令,我们在每个区可以切换,git常有三种区,分别是:
- 工作区
- 暂存区/过渡期
- 历史区
工作区就是我们本地电脑工作中使用的那部分代码,当我们使用命令git add命令把代码添加之后,我们的代码就提交到暂存区了,使用了git commit 命令,我们的代码就提交到历史区了。
相关Linux命令
1、打印当前文件目录
pwd
2、查看git配置
git config --list
3、配置全局的用户信息
git config --globle user.name "mmcai"
git config --globle user.email "xx@126.com"
4、配置当前目录下git的用户信息
git config user.name "mmcai"
git config user.email "xxx@126.com"
5、初始化git——告诉那个文件夹被git所管理
git init
6、递归强制删除文件夹
rm -rf xxx
-r 递归
-f 强制
7、其他
cd 切换文件目录
mkdir 在指定目录下创建文件夹
touch 在指定文件目录下创建文件
cat 查看文件内容
ls -al 显示当前目录下所有的文件内容
8、vi 编辑相关命令
vi <文件名>
i/u 切换到编辑模式
dd 删除当前行
ESC 退出编辑模式
:wq 保存文件并退出
:q! 强制退出
9、直接把工作区的内容提交到历史区
git commit -a -m '注释'
前提条件是,你必须使用git add 命令操作过一次
提交到历史区
上面我们说到GIT系统当中有三个区:工作区,暂存区,历史区,我们不能跨区操作,必须先把文件添加到暂存区之后,才能提交到历史区。如果把代码从工作区提交到暂存区,或者把暂存区的内容提交到历史区,代码只是copy了一份存到另外的空间,当前(工作区)当中的内容,不会发生变化。
工作区
当我们使用git init 命令行支行,我们当前就处在工作区
git init
暂存区
在工作区下,我们执行如下命令,就把我们当前的文件,提交到了暂存区
git add ./-A
既然能添加,当然也能删除暂存区,使用如下命令,我们可以删除暂存区里面的内容
git rm --cached 文件名
历史区
使用命令git commit 就把文件从暂存区
git commit -m '描述你此次提交到历史区做的修改'
-m 参数不能省略,必须填写
日志
查看git提交到历史区的历史状态,最新提交的内容在日志的最上面展示
git log
状态
查看当前git所在那个区?工作区,暂存区,历史区
git status
文件比较
通常为了查看每个区的内容有何不同,我们可以通过git diff命令来实现,我们上面知道,git有三个区,所以比较的情况也会分为几种情况:
- 工作区和暂存区比较
- 工作区和历史区比较
- 暂存区和历史区比较
git diff 工作区和暂存区比较
git diff <master> 工作区和历史区比较
gif diff --cached 工作区和暂存区比较
撤销
当我们工作区的代码,不小心或者写的比较不理想的情况下,我们想把本次修改的内容进行撤销的时候,GIT可以帮我实现。撤销分几种情况:
1、从暂存区回滚
2、如果暂存区也是需要回滚的,需要从上一层暂存区进行回滚
3、如果不小心提交到历史区,需要从上一层历史区中进行回滚
从暂存区回滚:
git checkout .
从暂存区的上一层进行回滚
git reset HEAD .
git checkout .
从历史区的上一层进行回滚
git reset --hard <版本号,版本号通过git log查看>
该操作会把工作区和暂存区全部覆盖
如果从历史区的上一层回滚之后,想再次回到之前的历史区怎么办?
git reflog
查看全部日志,获取版本ID
git reset --hard <版本ID>
只要你知道版本ID,你就可以使用git reset 回滚到任何版本
.表示当前目录下的所有文件
分支
分支的使用通常会有以下几种情况:
- 线上有bug的时候
- 基于当前项目的另外一个有不同逻辑的项目copy
- 多人开发
查看分支
git branch
创建分支
git branch <分支名>
切换分支
git checkout <分支名>
创建并切换分支
git checkout -b <分支名>
删除分支
git branch -D <分支名>
删除分支时,用户不能在当前分支上
当您在一个分支下创建了新的文件时,如果没有把文件提交到历史区,所有的分支下都能看到该文件。同时当你在一个分支下对文件进行了修改之后,在你没有把它提交到暂存区或者历史区之前,你切换分支会提示不允许,这个时候可以通过如下命令实现切换
git stash 暂存文件
git stash pop 还原暂存文件
工作流程是:分支1(没有提交到暂存区或历史区)——> git stash 暂存文件——>分支2——>git stash pop——>分支1
分支合并
合并分支的时候,确保当前分支时主干,否则,就把主干合并到了其它分支上去了
git merge <分支名>
查看分支情况
git log --graph --online
远程仓库
虽然git是分布式的,但我们往往还是需要一个中央服务器,这个服务器的主要任务可以理解成是我们的代码仓库。这个仓库我们叫做远程仓库,通常我们用github或者国内的gitee。上面我们说git当中有三个区:工作区,暂存区,历史区。远程仓库只会保存我们历史区当中的内容,所以,你的代码git commit 命令之后,才能推送到远程仓库当中。
远程仓库配置
要想把代码提交到远程仓库,一般我们需要有远程仓库相关的账号,而且要设置相关的秘钥。
添加远程仓库
git remote add <origin(别名)> <url>
删除远程仓库
git remote rm <别名>
直接设置远程仓库
git remote set-url <别名> <url>
查看远程仓库地址
git remote -v
拉去线上代码
git pull
克隆远程仓库到本地
git clone <url>
推送到远程仓库
git push -u origin master
-u 设置默认推送的主机,下次推送的时候,不用写仓库的名字,可以直接提交
gh-pages
在GitHub当中,我们创建一个gh-pages的分支,可以发布我们的静态页面,作为我们项目的一个介绍网站。
我们可以在github仓库的设置里面,找到GitHub Pages 主体,查看我们项目可被访问的web静态页面的url地址。
注意
- 为了控制我们本地的代码,那些可以被提交,那些事需要忽略的,我们需要添加一个.gitignore
- git不会上传空的文件夹,但我们可以再文件夹当中添加一个.gitkeep文件,把空文件夹提交上去
- 好的项目,通常会给项目添加标签,说明我们项目当中使用了那些技术,或者是什么类型的
- issue 如果对一个项目有问题,可以在这里给作者留言
代码fork-pull
github上面,看到一个比较不错的项目,想要copy到自己的仓库,可以通过fork的操作,把别人仓库里面的项目,克隆到自己远程仓库当中。当你觉得别人的代码写的不好的时候,可以通过pull requests 把你的代码提交到fork的项目当中。
结束
以上内容,算是我的学习笔记,初次之外,涉及到git的问题,可能还有很多,比如说想把一个项目同时提交到两个仓库(GitHub和gitee),解决冲突等,希望有机会我们能一起讨论讨论。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。