一. Git基本介绍
在Git基本命令操作介绍前,先介绍一下简略的介绍一下Git。大佬可以直接移步下面指令部分。
1. Git是什么
Git 是一个开源的分布式版本控制系统,可以协助使用者记录代码版本。
2. Git作为分布式管理工具Git 与 传统集中式管理工具SVN 区别点
- Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
- Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
- Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
- Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
- Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
3.Git 工作区,缓存区与版本库
工作区:代码编写进行的区域
暂存区:一般存放在 .git 目录下的 index 文件,我们把暂存区有时也叫作索引(index)
版本库:工作区有一个隐藏目录 .git,存放着Git 版本库信息
下图可以看到三者之间的操作关系,左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区,标记为 “master” 的是 master 分支所代表的目录树,可以帮助你理解下面的命令操作。
二. Git Bash本地仓库常用命令
个人基本信息配置和查看
下文中所有的name.type
为文件名称.类型
1. 配置账户邮箱(gitHub或gitee)
#设置全局用户名
git config --global user.name xxx
#设置全局用户邮箱
git config --global user.email xxx@qq.com
2. 查看账户邮箱
#查看列表
git config --list
#查看姓名
git config user.name= xxx
#查看邮箱
git config user.email= xxx@qq.com
git仓库操作
1. 初始化git本地仓库
#在你点击的路径初始化一个本地仓库
git init
#成功提示 : inialized empty Git repository in <* 你的路径 *>
2. 查看git状态
一般来说会显示需要提交的文件(uncommited)1和未追踪的文件(untracked)2
#和 git log的区别是只展示工作区中的操作记录
git status
3. git操作日志
# 显示此仓库的操作日志 最近三次修改记录
git log
#显示当前及之前的版本号
git log --decorate --graph --oneline --all
#将版本历史显示为一行, 历史版本号全部显示
git log --pretty=oneline
#将版本历史显示为一行, 历史版本号部分显示
git log --pretty=oneline --abbrev-commit
#查看分支合并图
git log --graph
4. 只查看提交日志
git reflog
5. 添加git文件到暂存区
当对工作区修改或新增的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改或新增的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中就完成了文件上传到暂存区的操作。
git add <name>
6. git提交文件
git commit -m "Submit comments this time"
每次提交都必须要填写说明注释,也就是双引号内内容必须填写
7. git删除文件(夹)
git rm和直接删除的区别在于git rm会将此文件的操作记录删除,而直接删除仅仅是删除了物理文件,没有删除和此文件相关的记录。git rm后会在版本库产生区别(有操作日志),而直接删除没有。
#删除文件
git rm name.type
#删除文件夹
git rm -r foldernName
#可以用下面两种操作在版本库中删除文件:
git rm name.type => git commit -m 'Submit comments this time'
rm name.type => git commit -am 'Submit comments this time'
注意:命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
8. 暂存区撤销操作
工作区修改了文件,而且执行了add,但还没执行commit,暂存区还是可以撤销的。
#撤销git缓存区中某个文件的操作
git reset HEAD name.type
#也可以通过 git log获取版本号,然后使用版本号和文件名回退
git reset 1a1e91bf37add6c3914ebf20428efc0a7cea33f3 name.type
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
9. 工作区还原操作
回退工作区中某个文件在最后一次提交后的所有操作,但不会丢失暂存区的操作,本质上就是用版本库中最新版本覆盖工作区内容,无论工作区的变动全部还原。
#将工作区的文件重置为版本库中最新的版本
git checkout -- name.type
10. 工作区版本回退
与前一个操作,区别就是执行范围,本命令是工作区内所有文件回退,从第一部分中的图片中可以看得到 HEAD
实际是指向 master 分支的一个指针。执行版本退回后,本地工作区的内容会自动和回退到的版本库版本的内容保持同步。
#回退至一个版本
git reset --hard HEAD^
#以上面的类推,回退两个版本前
git reset --hard HEAD^^
# 回退到 af8t66a9 版本号 的版本
git reset --hard af8t66a9
11. 下载指定版本内容
git clone -b 版本号 克隆路径
git版本分支操作
需要注意的是在你进行切换版本库操作时,你工作区中的文件并不会随着你变化版本库而改变,只会更新与版本库有关的文件, 无关文件并不会变化
1. 创建版本分支
#创建一个名称为name的分支
git branch name
2.切换版本库
在进行版本库切换时,不会变化工作区中新建文件内容,所以在进行推送时需要注意不收版本控制文件
#将当前分支切换到name的分支
git checkout name
3. 创建新分支并切换
#创建一个分支,创建完成分支后会自动切换过去
git checkout -b name
4. git合并分支
当我们新建分支 name 并做完工作之后,想要把新建分支中的更改提交至master时
#第一步,只需要切换回我们的master仓库
git checkout master
#git merge 我们想要被合并的分支名name
git merge name
5. 查看所有分支
git branch -a
结果中 HEAD指向当前分支
6. 删除分支
//普通删除
git branch
//普通删除失败时,强制删除
git branch -D
7.拉取全部分支
拉取所有分支的仓库版本以及log日志等,不会进行合并。
//git拉取远程所有分支
git fetch
//拉取名称为name的分支
git fetch name
8.查看分支差异
git diff
结果中会展示差异信息
三. Git 在Github和Gitee使用过程中报错以及解决方案
error: src refspec main does not match any
错误
错误:SRC refspec main不匹配任何
在我们第一次想将本地的工作区文件推送给GitHub时会有可能出现,GitHub上分支名为main,而我们本地分支为master,所以在推送时,就会产生错误。
解决方案
方案一
在开始创建版本库时,使用git clone直接克隆线上版本库。
git clone
方案二
1.分支不存在时新建分支
使用checkout创建对应分支并切换至对应分支
git checkout -b master
2.使用git add和git commit将文件添加至缓存
git add
git commit -m "xxx"
3.使用git commit推送
git commit -m "Submit comments this time"
未完待续…