在Git基本命令操作介绍前,先介绍一下简略的介绍一下Git。大佬可以直接移步下面指令部分。
Git 是一个开源的分布式版本控制系统,可以协助使用者记录代码版本。
工作区:代码编写进行的区域
暂存区:一般存放在 .git 目录下的 index 文件,我们把暂存区有时也叫作索引(index)
版本库:工作区有一个隐藏目录 .git,存放着Git 版本库信息
下图可以看到三者之间的操作关系,左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区,标记为 “master” 的是 master 分支所代表的目录树,可以帮助你理解下面的命令操作。
下文中所有的name.type
为文件名称.类型
#设置全局用户名
git config --global user.name xxx
#设置全局用户邮箱
git config --global user.email [email protected]
#查看列表
git config --list
#查看姓名
git config user.name= xxx
#查看邮箱
git config user.email= [email protected]
#在你点击的路径初始化一个本地仓库
git init
#成功提示 : inialized empty Git repository in <* 你的路径 *>
一般来说会显示需要提交的文件(uncommited)1和未追踪的文件(untracked)2
#和 git log的区别是只展示工作区中的操作记录
git status
# 显示此仓库的操作日志 最近三次修改记录
git log
#显示当前及之前的版本号
git log --decorate --graph --oneline --all
#将版本历史显示为一行, 历史版本号全部显示
git log --pretty=oneline
#将版本历史显示为一行, 历史版本号部分显示
git log --pretty=oneline --abbrev-commit
#查看分支合并图
git log --graph
git reflog
当对工作区修改或新增的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改或新增的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中就完成了文件上传到暂存区的操作。
git add <name>
git commit -m "Submit comments this time"
每次提交都必须要填写说明注释,也就是双引号内内容必须填写
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用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
工作区修改了文件,而且执行了add,但还没执行commit,暂存区还是可以撤销的。
#撤销git缓存区中某个文件的操作
git reset HEAD name.type
#也可以通过 git log获取版本号,然后使用版本号和文件名回退
git reset 1a1e91bf37add6c3914ebf20428efc0a7cea33f3 name.type
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
回退工作区中某个文件在最后一次提交后的所有操作,但不会丢失暂存区的操作,本质上就是用版本库中最新版本覆盖工作区内容,无论工作区的变动全部还原。
#将工作区的文件重置为版本库中最新的版本
git checkout -- name.type
与前一个操作,区别就是执行范围,本命令是工作区内所有文件回退,从第一部分中的图片中可以看得到 HEAD
实际是指向 master 分支的一个指针。执行版本退回后,本地工作区的内容会自动和回退到的版本库版本的内容保持同步。
#回退至一个版本
git reset --hard HEAD^
#以上面的类推,回退两个版本前
git reset --hard HEAD^^
# 回退到 af8t66a9 版本号 的版本
git reset --hard af8t66a9
git clone -b 版本号 克隆路径
需要注意的是在你进行切换版本库操作时,你工作区中的文件并不会随着你变化版本库而改变,只会更新与版本库有关的文件, 无关文件并不会变化
#创建一个名称为name的分支
git branch name
在进行版本库切换时,不会变化工作区中新建文件内容,所以在进行推送时需要注意不收版本控制文件
#将当前分支切换到name的分支
git checkout name
#创建一个分支,创建完成分支后会自动切换过去
git checkout -b name
当我们新建分支 name 并做完工作之后,想要把新建分支中的更改提交至master时
#第一步,只需要切换回我们的master仓库
git checkout master
#git merge 我们想要被合并的分支名name
git merge name
git branch -a
//普通删除
git branch
//普通删除失败时,强制删除
git branch -D
拉取所有分支的仓库版本以及log日志等,不会进行合并。
//git拉取远程所有分支
git fetch
//拉取名称为name的分支
git fetch name
git diff
错误: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"
未完待续…
uncommited:已有的,刚被修改尚未提交的 ↩︎
untracked:原先没有的,新建的 ↩︎