Git命令

Git命令操作 - 图1
理解:工作区、暂存区、本地库我认为都是抽象概念,其实指的都是项目文件夹。
工作区中的文件还没有被git追踪,add后会被git追踪,追踪后的文件改变将会被git察觉并记录。
commit后会生成历史版本,可以回退到任一历史版本。

签名设置 - git config

  • 签名:用来标识团队成员的身份签名

签名级别

  • 项目级别/仓库级别:仅在当前本地库(项目)范围内有效 git config user.name/user.emali
  • 系统用户级别(通常):登录当前操作系统的用户范围 git config —global user.name/user.emali
  • 二者都没有不允许

项目级别
image.png
查看:cat .git/config
image.png
系统级别
image.pngca
查看 : cat ~/.gitconfig (~位于系统用户目录下)

本地库基本命令

image.png

git status - 状态查看

git status:查看本地库当前状态
image.png

git init - 初始化本地库

git init : 在当前目录初始化本地库,实际是生成一个隐藏的 .git 文件夹,存放的是本地库相关的子目录和文件。

git add - 添加操作

git add 文件名 :将工作区的“新建/修改”添加到暂存区
git add . : 添加所有文件
git rm —cached 文件名 : 将文件从暂存区当中移除

git commit - 提交操作

git commit -m “commit message” 文件名 :将暂存区的内容提交到本地库

git log - 查看历史记录

git log : 完整信息
git log —online : 一行显示一条记录,只显示head以及之前的记录
git reflog :显示指针位置信息,以及所有记录
image.png

git reset - 版本前进后退

GIT 有一个 HEAD指针 指向当前版本,版本前进后退其实就是移动HEAD指针
git reset —hard 版本号 : 基于索引号前进后退(推荐)
git reset —hard HEAD^ : ^基于当前位置后退 HEAD^^^ 退三个版本
git reset —hard HEAD~x : ~基于当前位置后退x步 HEAD^^^ == HEAD~3

—soft 仅仅在本地库移动指针!
—mixed 在本地库移动指针、重置暂存区
—hard 本地库移动指针、重置暂存区、重置工作区

git diff - 比较差异

git diff [本地库版本号] [文件名] : 不写版本号,则默认将工作区内的指定文件和暂存区比较。
不写文件名,则默认将工作区内的所有文件进行比较。

分支命令

不同分支彼此之间互不影响,通过多分支可以并行开发多个不同测试分支。

创建分支 - git branch [分支名]

git branch [分支名]

查看分支 - git branch -v

git branch -v

切换分支 - git checkout [分支名]

git checkout [分支名]

合并分支 - merge

  1. 第一步,切换到接受修改的分支上(被合并,增加新内容) git checkout master
  2. 执行 git merge [要合并的分支名] 命令 git merge dev
  3. 冲突
    1. 冲突 : 不同分支对相同文件同一处做出了不同修改
    2. 有冲突时 merge 会合并失败,并对当前分支对应文件进行改变,并使当前分支进入merging状态

image.png

  1. 解决冲突
    1. 编辑文件,删除特殊符号
    2. 把文件修改到满意程度,保存退出
    3. git add [文件名]
    4. git commit -m “日志信息” (注意此处不可以指定文件名)
    5. 手动 commit merge 成功,分支退出 merging 状态

远程库命令

查看远程库 - git remote -v

git remote -v :查看远程库信息

添加远程库 - git remote add

git remote add [远程库名] [远程库链接地址] :添加远程库

推送 - git push

git push [远程库名] [分支名] : 将本地分支推送到服务器上去

克隆 - git clone

git clone [远程库链接地址] :

  1. 1. 完整的把远程库下载到本地
  2. 1. 创建 origin 远程地址别名
  3. 1. 初始化本地库

拉取 - git pull、fetch、merge

pull = fetch + merge
git fetch [远程库名] [远程分支名] :把远程库内容下载到本地库,不会修改工作区
git checkout [远程库名/远程分支名] :可以通过跳转到远程分支,查看远程内容

git merge [远程库名/远程分支名] :将远程分支合并到本地分支

git pull [远程库名] [远程分支名] : 把远程库内容下载到本地库,并且merge当前分支,修改工作区

即:简单拉取,不会产生冲突,使用pull即可

远程冲突

两个成员对同一个文件同一位置进行修改,则先push的人可以成功,后push的人不能成功。
后push的人只能 先pull ,在push

pull的时候有冲突,会使当前分支进入merging状态,解决方式和本地冲突类似。

跨团队协作

团队外的人(A)想修改项目(由B创建),无法直接通过pull修改项目。

  1. 首先通过fork : 将项目拷贝一份到A处
  2. A在本地修改此项目,并推送到远程
  3. A在远程仓库发起 pull request
  4. B在原项目远程仓库中查看 pull request,审核决定要不要合并回原项目中。
  5. merge 则远程库会合并 pull request 中的修改