Git命令
理解:工作区、暂存区、本地库我认为都是抽象概念,其实指的都是项目文件夹。
工作区中的文件还没有被git追踪,add后会被git追踪,追踪后的文件改变将会被git察觉并记录。
commit后会生成历史版本,可以回退到任一历史版本。
签名设置 - git config
- 签名:用来标识团队成员的身份签名
签名级别
- 项目级别/仓库级别:仅在当前本地库(项目)范围内有效 git config user.name/user.emali
- 系统用户级别(通常):登录当前操作系统的用户范围 git config —global user.name/user.emali
- 二者都没有不允许
项目级别
查看:cat .git/config
系统级别
ca
查看 : cat ~/.gitconfig (~位于系统用户目录下)
本地库基本命令
git status - 状态查看
git status:查看本地库当前状态
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 :显示指针位置信息,以及所有记录
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
- 第一步,切换到接受修改的分支上(被合并,增加新内容) git checkout master
- 执行 git merge [要合并的分支名] 命令 git merge dev
- 冲突
- 冲突 : 不同分支对相同文件同一处做出了不同修改
- 有冲突时 merge 会合并失败,并对当前分支对应文件进行改变,并使当前分支进入merging状态
- 解决冲突
- 编辑文件,删除特殊符号
- 把文件修改到满意程度,保存退出
- git add [文件名]
- git commit -m “日志信息” (注意此处不可以指定文件名)
- 手动 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. 创建 origin 远程地址别名
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修改项目。
- 首先通过fork : 将项目拷贝一份到A处
- A在本地修改此项目,并推送到远程
- A在远程仓库发起 pull request
- B在原项目远程仓库中查看 pull request,审核决定要不要合并回原项目中。
- merge 则远程库会合并 pull request 中的修改