# Git 常用命令
# 本地库操作
# 本地库初始化
git init:初始化一个本地空仓库
初始化操作会生成一个 .git 目录,存放的是本地库相关的子目录和文件,不要删除和胡乱修改。
touch .gitignore:创建.gitignore 文件
# 设置签名
作用:区分不同开发人员的身份
辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系
- 项目级别/仓库级别:仅在当前本地库范围有效
git config user.name "username":配置用户名git config user.email "xx@qq.com":配置邮箱- 信息保存位置
.git/config文件
- 系统用户级别:登录当前操作系统的用户范围
git config --global user.name "username":配置用户名git config --global user.email "xx@qq.com":配置邮箱- 信息保存位置
~/.gitconfig文件
级别优先级:
- 就近原则:项目级别优先于系统用户级别,二者都存在时,采用项目级别的签名
- 如果只有系统用户级别的签名,就以系统用户级别的签名为准
- 二者都没有,则不允许
# 基本操作
# 查看状态
git status:查看工作区和暂存区中代码或文件的状态:红色(当前处于工作区,还没有提交到暂存区)、绿色(当前处于暂存区,还没有提交到历史区),如果没有文件,代表三个区域代码已同步
# 添加操作
git add <file>:把当前工作区中的某个新建/修改文件的操作提交到暂存区
git add . / git add -A:把当前工作区中所有最新修改文件的操作都提交到暂存区
# 提交操作
git commit <file> :将暂存区的某个文件的操作提交到历史区(省略文件名表示将暂存区所有文件的操作提交到历史区)
- 按
i键从一般模式进入编辑模式 - 输入提交信息
- 按
ESC键再:wq写入退出
git commit -m“日志信息“ <file>:将暂存区的某个文件的操作提交到历史区(省略文件名表示将暂存区所有文件的操作提交到历史区)
# 查看版本
git log:查看当前历史区提交的记录
git log --pretty=oneline:每次提交记录以一行的简洁形式显示
git log --oneline:每次提交记录以一行显示,并且索引值也以简洁形式显示
git reflog:查看当前历史区提交的记录,并且显示回退到某个版本需要的步数
多屏显示控制方式:
- 空格向下翻页
b向上翻页q退出
# 前进后退
- 基于索引值操作:可进可退
git reset --hard <局部索引值>
- 使用
^符号:只能往后退git reset --hard^:后退一个版本(一个^表示后退一步, n 个表示后退 n 步)
- 使用
~符号:只能后退git reset --hard~n:后退 n 个版本
reset 命令的三个参数对比:
--soft(仅历史区前进后退)- 仅仅在本地库移动
HEAD指针
- 仅仅在本地库移动
--mixed(暂存区和历史区同时前进后退)- 在本地库移动
HEAD指针 - 重置暂存区
- 在本地库移动
--hard(三区同时前进后退)- 在本地库移动
HEAD指针 - 重置暂存区
- 重置工作区
- 在本地库移动
# 删除文件找回
前提:删除前,文件存在时的状态提交到了本地库
添加到历史区的删除文件找回
git reset --hard <局部索引值>:三区同步回退到文件删除前的版本添加到暂存区的删除文件找回
git reset --hard HEAD:工作区和历史区回退到本地库所在指针的版本
# 比较文件
git diff <file>:将工作区中的文件和暂存区进行比较
git diff HEAD <file>:工作区 VS 历史区所在指针的版本进行比较
git diff master:工作区 VS 历史区
git diff --cached:暂存区 VS 历史区
注意:不带文件名比较多个文件
git rm --cached <file>:将某个新增文件的操作从暂存区删除
# 分支管理
# 什么是分支
在版本控制过程中,使用多条线同时推进多个任务。

# 分支的好处
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可
# 分支操作
git branch <分支>:创建分支
git branch -v:查看分支
git checkout <分支>:切换分支
git merge <分支>:将某个分支合并到当前所在分支(需要先切换到接收合并的分支上)
合并冲突的表现:

合并冲突的解决:
- 编辑文件,删除特殊符号
- 把文件修改到满意的程度
git add <file>git commit -m"日志信息",此时不能带具体文件名
git checkout -- <file> :撤销文件修改
# 远程库操作
# 关联远程库
git remote -v:查看本地库和远程库的所有关联信息
git remote add [远程库地址别名] [远程库git地址]:在本地创建远程库别名 origin ,并且关联到远程库
git remote remove [远程库地址别名]:使用别名移除本地库与远程库的关联
# 推送远程库
git push [远程库地址别名] [远程分支名]:把自己本地库信息推送到远程库的分支下
# 克隆远程库
git clone [远程库git地址]:将远程库克隆下载到本地
- 完整地把远程库下载到本地
- 创建
origin远程地址别名 - 初始化本地库
# 邀请成员
邀请者:在 GitHub 的仓库中,依次点击 Setting -> Collaborators -> 添加邀请成员的 GitHub 账户 -> 复制邀请链接发送给被邀请成员
被邀请者:登录自己的 GitHub 账户,访问邀请链接接受邀请即可
# 拉取远程库
pull = fetch + merge
git fetch [远程库地址别名] [远程库分支名]:将远程库分支的信息拉取到本地库
git merge [远程库地址别名] [远程库分支名]:将拉取到本地的远程库分支信息与本地库合并
git pull [远程库地址别名] [远程库分支名]:将远程库分支的信息拉取并合并到本地库
# 解决冲突
如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉取。拉取下来后如果进入冲突状态,则按照“分支冲突”操作解决即可。
# 跨团队协作
- 先将别人远程库中的项目
Fork到自己的远程库中 - 然后将自己远程库中的项目
clone到自己的本地库中 - 在本地修改项目之后,推送到自己的远程库中
- 在自己远程库中,依次点击 Pull request -> New pull request -> Creat pull request 提交到别人远程库中
- 别人在远程库中查看提交的信息,如果没有问题,点击 Merge pull request -> 填写本次操作的日志信息 -> Confirm merge 将提交的信息合并到项目中
# Git 工作流
