Git介绍
- Git是一个分布式版本控制系统
- 版本控制:仓库中每个文件都有完整的历史版本记录.
- 分布式版本控制系统:分布式即每个人都有一个完整的版本库只需本地修改,长传进度只需同步仓库即可.
Git的安装
- 前往官网安装 Git
- 下载安装包然后一直点下一步就行了
1. git用户名/邮箱配置及查看
配置
$ git config --global user.name "输入你的名字" $ git config --global user.email "输入你的邮箱"查看
$ git config --global -l
2. 新建版本库
git仓库的创建及一些常用linux命令
git仓库初始化(请cd到要构建本地仓库的位置)
$ git init 这里会生成一个.git文件但是这是隐藏文件 隐藏文件查看方式:点 查看->显示->隐藏的文件生成文件和初始化git仓库也可以写成一步
$ git init 文件名还有一种创建git仓库的方式就是克隆别人的仓库
$ git clone 仓库地址 //一般地址在别人github上会写补充代码:
- 这个指的是返回上级目录
$ cd .. - 若文件在目录下可以直接cd文件名(这个和返回上级目录都是相对路径)
$ cd 文件名 - 直接cd到你要的目录(绝对路径)
$ cd 完整的目录 //补充一下单个.表示当前目录后面我们可以巧用.来做操作 - 创建文件
$ mkdir 文件名 - 看目录下文件的代码(不包括隐藏目录)
$ ls - 要看隐藏文件
$ ls -a - 查看文件信息
$ ls -l - 隐藏文件+信息都显示
$ ls -al - 删除当前目录下某个文件
$ /rm -rf 文件名包括完整后缀 //后缀查看方式在刚才隐藏文件旁边有个文件扩展名 - 创建文件
$ echo "内容" $ 文件名(包括后缀) - 查看文件内容
$ cat 文件名(包括后缀) - 在vim中编辑文件
$ vi 文件名(包括后缀) - 查看当前目录位置
$ pwd - 清屏
$ clear
3. git的工作状态及文件状态
简单展示命令具体用法在后面
工作区域:工作区 -> 暂存区 -> 本地仓库
命令: git add git commit
工作区域:工作区 <- 暂存区 <- 本地仓库
命令: git checkout git reset
工作区域:本地仓库 -> 远程仓库
命令: git push
工作区域:远程仓库 -> 本地仓库
命令: git clone/fetch
工作区域:远程仓库 -> 工作区
命令 git pull
4. 添加和提交文件
- 查看文件状态
$ git status - 刚创建文件会显示Untracked
- 现要把他放入暂存区
$ git add 文件名 - 然后就会显现changed to be commited
- 现在提交到本地仓库
- 场景1(-m提交):
$ git commit -m "Inital commit" //这里 -m "名字" 我的理解是给该次提交版本起个名字方便查询以及回退 - 场景2(打开vim提交):
$ git commit //按 i 键进入编辑模式输入前面说的我觉得也是名字 //按 esc 退出编辑模式,输入 :wq 保存 //注意不管第几次题解只有暂存区的文件才能提交 - 场景3(更改了一个文件后想直接提交到本地仓库):
$ git commit -a -m '名字' //注意这里只适用于用git status查看发现是modified状态的文件 - 提交记录查询
$ git log - 每次提交记录只显示一行
$ git log --oneline //除此之外还有--graph(这里先学分支后再讲)和--all(所有分支)
5. .gitignore文件
//这个文件作用是忽视一些文件在操作git的时候
//语法1(忽视单个文件):
文件名(包括后缀)
//语法2(忽视一个文件夹):
文件夹名/
//语法3(忽视某种后缀):
*后缀名
//后缀名以 . 开头
//在语法3中如果你在该后缀文件中有某个文件不想忽略
!文件名(包括后缀)
//去github上的gitignore可以看到很多模版
6. 版本回退
首先回退的命令是reset其中有三种类型
--hard --mixed --soft
区别:
工作区 暂存区
--hard N N
--mixed Y N (什么都不写默认是这个)
--soft Y Y
- 第一步我们先用git log --online --all看一下信息
- 会发现前面有编号对每次版本
- 回退操作:
$ git reset (--?) 版本编号(可以不写全前提是不写全的部分需要与其他版本编号不一样) - 如果想要回退到之前的状态但是有因为已经回退了操作编号不见了那么可以用这个命令(查询所有操作)
$ git reflog //然后再用一次git reset就好了
7. 分支的操作
作用:如果我们想基于一些基础功能做不同的项目就可以用到分支这样就能单独管控不同的项目
查看当前有哪些分支
$ git branch- 创建一个分支
$ git branch 分支名 - 删除一个分支
$ git branch -d 分支名 - 切换进入分支
$ git checkout 分支名 - 分支的合并(分支回到主干的过程)
- 分支的合并指的是内容而不是分支
$ git merge 分支名 //若有文件不一样就会发生冲突 - 查看冲突
$ git diff - 解决冲突之后就会合并(解决就是改文件改完之后再提交)
$ git commit '操作名' - 分支的变基(变基是改变分支开始的位置)
$ git debase 分支名 //这里填写的需要变基到的分支名 - 分支的优选(让其他分支的提交作用于当前分支)
$ git cherry-pick 分支编号
8. 远程仓库
远程仓库->本地仓库方式1
- 先告诉本地有这个远程仓库
git remote add 远程仓库名字(自定义) 远程仓库的地址 - 从本地仓库投到远程仓库
git push 远程仓库名字 本地仓库的分支名字 - 这里输完会弹出来一个github登录界面
- 这里去git上生成一个token
- setting -> Develop setting -> Personal access tokens -> Generate new token(记得创建的时候勾选一些权限)
远程仓库->本地仓库方式2
- 先cd到要放文件夹的位置然后直接
$ git clone 远程仓库地址 - 这样就会直接克隆到本地仓库
- 但是当另一个人提交了1次代码但是你clone的时候并未clone他的代码(解决方案):
- 此时应该是我们提交代码会报错(rejected)
- 那么我们之间抓取该文件
$ git fetch 远程仓库名字 - 但是抓取完我们用log查看发现这是两个分支所以我们需要merge合并
$ git merge 远程仓库拉下来的分支名 然后再push进远程仓库就好了
同时上次提交的那位的朋友
- 他也需要把你提交的文件fetch下来
$ git fetch 远程仓库名字 - 此时他开log会发现head指向的还是现在他的版本位置也就是说他本地仓库已经拉下来了但是他本地工作区还没有更改
- 那么就需要合并一下fetch的内容
$ git merge 远程仓库拉下来的分支名 - 还有一个更简单的操作
- pull = fetch + merge
$ git pull 远程仓库名字 - 这样直接就能拉到工作区