Git命令记录
- Git
- 2023-03-12
- 497热度
- 0评论
初始化本地仓库
git init
#执行完该命令之后会创建一个.git目录,该目录中包含了配置文件等内容;
#注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改,否则本地库就不能正常工作了。
设置签名
#形式:用户名和email地址
#email地址随意就可以,作用是区分不同开发人员的身份
#辨析:这里的email和登录gitee或GitHub的账号密码没有任何关系
---通过参数可以区分成两个级别---
#项目(仓库)级别:仅在当前本地库范围内有效
git config #不带参数是项目级别的
#系统用户级别:登录windows系统(操作系统)的用户,对该系统中的项目都有效
git config --global #带global是设置全局系统级别
#如果都设置了,则使用项目级别的签名,如果项目级别没设置,就以系统级别为准。
#如果都没有,是不允许的,提交的时候会出错
#例子
git config user.name andy
git config user.email andy@ex.com
#项目级别的保存在当前项目的.git目录下的config文件中
git config --global user.name andy
git config --global user.email andy@ex.com
#系统级别的保存在家目录~(C:/Users/用户名)的.gitconfig文件中
查看工作区、暂存区的状态
git status
#On branch master:当前所在分支为主分支
#No commits yet:还没有任何的提交;指的是本地库
#nothing to commit (create/copy files and use "git add" to track):也没有什么可提交的;指的是暂存区
#Untracked files:(use "git add <file>..." to include in what will be committed);可以使用git add 文件名提交到暂存区
#nothing added to commit but untracked files present (use "git add" to track):没有往暂存区提交,当时是未追踪的文件存在
从工作区提交到暂存区
git add [文件名]
#将文件的新建/修改添加到暂存区
从暂存区删除
git rm --cached [文件名]
从暂存区提交到本地库
git commit [文件名]
#会进入vim编辑器并提示输入commit message,相当于写一下注释,这次提交了什么东西,什么内容。
#输入:set nu可以显示行号
#按i键进入输入模式进行编辑即可
#如果不项打开编辑器,也可以使用下面的命令
git commit -m "这里是commit message" [文件名]
#如果是新创建的文件,必须先执行git add命令再执行git commit命令
#如果是对已有的文件进行修改,可以不add,直接commit,但是不能够撤销了
查看版本的历史纪录
git log #显示的最完整的形式
#多屏显示控制方式:
#空格向下翻页
#b向上翻页
#q退出
git log --pretty=oneline #每条日志只显示一行
git log --oneline #哈希值只显示一部分,只显示过去的历史记录
git reflog #比--oneline多了一些信息(HEAD指针到对应版本需要移动的次数),对于前进后退移动指针具有参考价值。过去和未来的历史纪录都显示
版本的前进或后退
#本质就是HEAD指针的移动
(1)基于索引值操作(推荐)
#先git reflog查看一下
git reset --hard [哈希索引值]
(2)基于^符号
#异或符号只能往后退,不能往前
git reset --hard HEAD^ #后退一步
git reset --hard HEAD^^^ #后退三步
(3)基于~符号
#用于取代很多个^符号的时候,也是只能后退
git reset --hard HEAD~3 #后退三步
reset命令的三个参数对比
#--hard参数:在本地库移动指针,重置暂存区和工作区
#--soft参数:仅仅在本地库移动指针
#--mixed参数:在本地库移动HEAD指针,重置暂存区
#使用git reset --hard HEAD恢复为当前指向的位置
恢复删除的文件
#前提:删除前,文件存在时的状态提交到了本地库
#新建a.txt文件
vim a.txt
#提交到暂存区
git add a.txt
#提交到本地库
git commit -m "new a.txt" a.txt
#删除a.txt
rm a.txt
#使用git reflog查看历史版本
#回退到刚创建的时候
git reset --hard [哈希索引值]
比较文件差异
git diff [文件名]
#不加参数是工作区和暂存区进行比较
#git是以行为单位进行文件内容管理的
#红色的-号代表删除了
#绿色的+号代表新增的
#如果是在原有行内容的基础上进行修改,则是先把改行删除,再把最终内容增加
git diff HEAD [文件名]
#加上HEAD参数是工作区和本地库中HEAD指针所在版本进行比较
git diff HEAD^ [文件名]
#和上一个历史版本进行比较
git diff [哈希索引值] [文件名]
#和某一个历史版本进行比较
#不带文件名可以比较多个文件
git分支介绍
#什么是分支?
#在版本控制过程中,使用多条线同时推进多个任务。
#在初始化本地仓库时会有一个默认的master(主干)分支
#新增分支可以用feature开头,表示功能
#新增分支的内容是从主干分支复制过来的
#各个分支在开发的过程中是相互独立的
#分支开发完再合并到主分支
#用hot_fix分支来修复主分支中的bug
分支的好处
#同时并行推进多个功能的开发,提高开发效率
#各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
分支的操作
#查看所有分支
git branch -v
#*号代表当前所处分支
#创建新分支
git branch [分支名]
#切换分支
git checkout [分支名]
#合并分支
#必须先切换到要接受合并的那个分支下面去,比如要将hot_fix分支合并到master分支,就先切换到master分支下面去
git merge [分支名]
#解决冲突
#举例:master分支和hot_fix分支修改同一个文件的同一个地方,然后进行合并时会产生冲突
#产生冲突后git不知道要听谁的,所以需要人来做一个决定,手动去解决冲突
#第一步:编辑文件,删除特殊符号
#第二步:把文件修改到满意的程度,保存退出
#修改完冲突之后执行下面两个命令
git add [文件名]
git commit -m "日志内容" #一定不能带文件名
#合并分支后原来那个分支内容不变,而是当前分支内容是最新的
删除远程分支
git push origin --delete [远程分支名]
例如:git push origin --delete develop
#说明:删除远程的develop分支
更新远程缓存
git fetch -p origin
切换到远程分支
git checkout -t origin/[远程分支名]
例如:git checkout -t origin/develop
#说明:切换到远程有本地没有的分支,会自动在本地创建该分支并切换到该分支
tag的操作
#查看tag
git tag
#删除本地tag
git tag -d tag-name
#删除远程tag
git push origin :refs/tags/tag-name
#基于tag创建分支
git branch <new-branch-name> <tag-name>
例如:git branch newbranch v1.0