git大全(入门)
版本控制器
Git就是版本控制器,控制的对象是开发的项目代码。
主要有以下两大功能:
# git的两大功能: -多人协同开发代码合并 -对版本进行管理,能切换回老版本
版本管理软件
主要有两类:Git和 svn(很老),
两者的区别:
-svn:CVCS(集中式管理系统),要是服务器被黑或者出现不可逆宕机情况,会影响开发进度
-git:DVCS(分布式管理系统),如果服务器崩了可以用一台客户端作为备用服务器,不会影响开发进度
git的工作流程
Git的使用
Git安装
# 1.下载对应版本:https://git-scm.com/download # 2.安装git: # 一路下一步 # 任意位置右击,能看到 -git bash here # 通过命令来操作文件 -git gui here # 图形化界面,一般不用
Git的三个区域
工作区、暂存区、版本库,如下:
工作区 暂存区 版本库
代码存放区域 代码改完放到暂存区 管理了历史代码
修改删除代码 才能提交到版本库 必须从暂存区提交过来
Git命令
初始化
-初始化:git init 文件夹名 # 管理指定文件夹 -初始化:git init # 当前路径全被管理 # 初始化仓库,在某个想被git管理的文件夹下执行,会创建出 .git隐藏文件夹,代表该文件夹被git管理了
查看仓库状态
# 查看仓库状态 git status # 红色表示未被管理 # 绿色表示提交到暂存区了
工作区到暂存区
git add a.txt # 把a提交到暂存区 git add . # 把当前路径下所有数据批量提交到暂存区
添加用户信息
数据要提交到版本库之前必须配置用户信息,否则无法提交到版本库
# 设置全局用户信息 git config --global user.name 'yessir' git config --global user.email '983410683@qq.com' # 在在全局文件 C:\Users\用户文件夹\.gitconfig可以查看用户信息,在所有仓库下都可以使用 # 设置局部用户信息--->只对当前仓库有效 git config user.name 'lqz' git config user.email '2333@qq.com' #注:在当前仓库的.git文件夹下,config可以查看到局部的用户信息
暂存区到版本库
数据要提交到版本库之前必须配置用户信息,否则无法提交到版本库
git commit -m '注释,我新增了a' # 把暂存区的所有数据都提交到版本库 需先添加作者信息
# 提交的时候必须加注释 不加注释无法提交成功
查看版本库的版本信息
git log # 查看版本管理的日志 git reflog # 查看日志,查看的条数更多,内容更少
回滚:(两种)
1. git checkout . (使用的少)
2. git reset --hard 版本号 (使用的多)
git reset --hard 版本号 # 指定将版本库中某个版本恢复到工作区 把a的新增提交到版本管理 新建b,在a中新增一行 git checkout . # 回复到提交版本的位置,a是空的,b没有被git管理,所以,是什么样,还是什么样
示例:
-在a.py 中加入一行代码 -git status # 红色的a.py,没有提交到暂存区 -git add . # 提交到暂存区 -git commit -m '注释' # 提交到 版本库 -删除 a.py -git status # 红色 -git add . # 提交到暂存区 -git commit -m '注释' # 提交到 版本库 # 到此,总共提交了三次(新建a,修改a,删除a) -git log #查看日志 -git reset --hard b9b7824 # 回到某个版本 -git reset --hard 5de4a6b
过滤/忽略文件
# 有些文件,不想被git管理,就要设置忽略文件 # 在项目根路径,跟.git文件夹一个路径,新建.gitignore. 在里面配置(.gitignore文件本身不要忽略) 过滤文件内容:
#号是注释,没有用 文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤 /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤 eg: a.txt:项目中所有a.txt文件和文件夹都会被过滤 /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤 /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤 *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符) 空文件夹不会被提交(检测不到),空包会被提交,包可以被提交(包中有一个init空文件) /dist 表示根路径下的dist文件夹,不被管理 *.py 表示后缀名为py的文件,都被忽略 *.log* 表示后缀名中带log的都被忽略
git分支操作
-查看分支: git branch # 查看所有分支,分支是绿的,表示在当前分支上 -创建分支: git branch 分支名 -创建并切换: git checkout -b 分支名 # 可以不记,分两步 -删除分支: git branch -d 分支名 # 无法删除当前所在的分支 -切换分支: git checkout 分支名 -合并分支: git merge 分支名 # 把dev分支合并到master分支:切换到master分支,执行合并dev分支的命令 # 分支1想吞了分支2,必须在分支1上执行,反之亦然
git merge dev # master分支吞并了dev分支
示例:
创建分支: git branch dev git branch bug git branch env 切换分支: git checkout dev 删除分支: git branch -d env # 无法删除当前所在的分支 合并分支: git merge bug # dev分支把bug分支合并了 创建并切换分支: git checkout -b sdiao
切换到sdiao分支下
git checkout sdiao
在sdiao分支下添加一个a.txt文件,然后添加到暂存区并提交到版本库
git add .
git commit -m 'sdiao分支新增了a.txt文件'
这时切到dev分支,发现看不到a.txt文件,其他分支也一样,只有sdiao分支能看到
git checkout dev
删除远程仓库的文件
在git上只能删除仓库,却无法删除文件夹或文件, 所以只能通过命令来解决,
首先进入项目master文件夹下, Git Bash Here ,打开命令窗口
$ git pull origin master # 将远程仓库里面的项目拉下来 $ dir # 查看有哪些文件夹 $ git rm -r --cached target # 删除target文件夹 $ git commit -m '删除了target' # 提交,添加操作说明