# 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 <分支>:创建分支

git branch -v:查看分支

git checkout <分支>:切换分支

git merge <分支>:将某个分支合并到当前所在分支(需要先切换到接收合并的分支上)

合并冲突的表现:

git-branch-merge-conflict

合并冲突的解决:

  • 编辑文件,删除特殊符号
  • 把文件修改到满意的程度
  • 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 工作流

git-flow

# 参考目录

尚硅谷 Git 教程