1. Git简介
Git是和SVN一样的版本控制工具,它和SVN最大的区别是SVN是集中式的版本""控制工具,而Git是分布式版本控制工具。
Git是Linux之父Linus在2005年为了管理Linux代码而使用C语言开发的版本控制系统。Git的官网:https://git-scm.com/
1.1 Git安装
下载地址:| Windows | Linux/Unix |
在Windows上安装Git非常简单,全程点击"next"不需要任何思考。具体的安装步骤可以参考官方的这篇教程4 起步 - 安装 Git
1.2 代码托管中心(Git服务器)
一个团队使用Git来进行开发的时候,最好的方式是按照集中式的思想搭建一个中心的Git服务器,团队中的成员都可以从该服务器中推送和拉取代码。
对于Git服务器,既可以是我们自己搭建,也可以选择使用第三方的服务。
- GitLab
- GitHub(第三方的代码托管中心)
- 码云(国产的GitHub)
1.3 Git结构
工作区:我们代码等资源所存放的目录,除了其中的.git隐藏目录。
暂存区:一般存放在"git目录"下的index文件(.git/index)中
本地库:
git commit
之后,暂存区的所有内容会提交到本地库。
这一块的内容可以参考:工作区和暂存区
2. Git命令行操作
2.1 初始化本地仓库
mkdir HelloGit
cd HelloGit
git init
git init
命令执行之后会将当前目录初始化成本地仓库,Git自动为我们创建了唯一一个master分支,默认是往该创建好的master分支提交修改。
.git隐藏目录
中的内容如下所示注意,一般情况下请不要动
.git
隐藏目录中的内容。
2.2 设置签名
Git 全局设置:
-- 设置
git config --global user.name "codingXcong"
git config --global user.email "coding_zgc@163.com"
-- 查看
git config --global user.name
git config --global user.email
其中,--global
是可选,其表示系统用户级别,去除--global
则表示单个仓库级别。config配置信息保存的路径为.git/config
。
注意:设置用户名和邮箱主要是区分不同开发人员的身份,它和github或码云的登录信息没有任何关系。
2.3 基本操作
2.3.1 添加
-- 添加单个文件
git add [file name] --将工作区的文件添加到暂存区
-- 添加当前目录下所有的文件
git add .
2.3.2 提交
-- 提交单个文件
git commit -m "commit message" [file name] --将暂存区的内容提交到本地库
-- 提交暂存区所有的文件
git commit -m "commit message"
在执行提交之前,文件必须要先通过git add
添加到暂存区。
2.3.3 删除
--从工作区中删除文件
git rm [filename]
--从暂存区中删除文件
git rm --cached [filename]
--从工作区、暂存区、本地库三个地方删除文件
git rm [filename]
git commit -m 'delete somefile'
--从暂存区、本地库中删除文件,但是工作区还存在。
git rm --cached [filename]
git commit -m 'delete somefile'
2.3.4 查看提交记录
git log
commit
后跟着的字符串表示该次提交的索引值。
--让某一条commit记录显示在一行当中
git log --oneline
图中第一列黄色的字符串表示该次提交的局部索引值
。如果提交的记录太多,可以通过以下方式来多屏控制:
- 空格,向下翻页
- b,向上翻页
- q,退出
我们还可以通过git reflog
实现相同的效果
git reflog
其中HEAD@{}中的数字,表示移动到当前版本需要多少步。
2.3.5 提交记录的前进和后退
--基于提交记录的前进和后退
git reset
我们可以先通过git reflog
命令获取各个提交记录,然后通过各提交记录的局部索引值
实现不同提交版本之间的切换(HEAD指针的切换)。
git reset --hard fd01f6e --回到初始化的时候
git reset --hard 9f825f0 --回到第二次提交的版本
git reset
指令还有另外两个参数--soft
、--mixed
,它们和--hard
的区别如下:
- --soft参数,本地代码不会发生变化
仅仅在本地库移动HEAD指针 - --mixed参数,本地代码不会发生变化,默认为这个参数
在本地库移动HEAD指针
重置暂存区 - --hard参数,本地代码会发生变化
在本地库移动HEAD指针
重置暂存区
重置工作区
请参考:git reset soft,hard,mixed之区别深解
2.3.6 状态查看
git status --查看工作区、暂存区状态
2.3.7 比较文件差异
git diff filepath 工作区与暂存区比较
git diff HEAD filepath 工作区与HEAD ( 当前工作分支) 比较
git diff --cached filepath 暂存区与HEAD比较
git diff branchName filepath 当前分支的文件与branchName 分支的文件进行比较
git diff commitId filepath 与某一次提交进行比较
2.3.8 分支管理
--创建分支
git brach [分支名]
--查看分支
git brach -a
--切换分支
git checkout [分支名]
-- 从远程拉取分支,并在本地创建分支
git checkout -b feature/daily_20191017 origin/feature/daily_20191017
-- 合并分支
1. 切换到接收合并的分支上
git checkout [接收合并的分支名]
2.执行merge命令
git merge [将要被合并的分支名]
2.3.9 文件冲突
冲突解决办法:
- 编辑文件, 删除特殊符号
- 把文件修改到满意的程度, 保存退出
- git add [文件名 ]
- git commit -m "日 志信息"。注意: 此时 commit 一定不能带具体文件名
3 GitHub
我们可以将GitHub看成代码托管中心或者远程仓库。GitHub的地址:https://github.com/
3.1 申请账号
GitHub官方入门教程
3.2 创建远程仓库
3.3 创建远程仓库别名
git remote -v 查看当前所有远程地址别名
git remote add [别名 ] [远程地址]
3.4 推送到远程仓库
git push <远程别名> <本地分支名>
git push origin master
完整一点的push指令如下
git push <远程别名> <本地分支名>:<远程主机分支名>
省略了远程主机分支名,即表示其名称和本地分支名相同。如果不存在就创建。
3.5 克隆
git clone https://github.com/codingXcong/rpc_learn.git
git clone的执行效果:
- 把远程库下载到本地;
- 初始化本地库;
- 创建origin远程地址别名。
3.6拉取
git pull origin
作用:取回远程主机某个分支的更新,再与本地的指定分支合并
格式:git pull <远程仓库地址别名> <远程分支名>:<本地分支名>
git pull = git fetch + git merge
3.7 团队成员邀请
-
添加协作者
-
复制邀请链接
然后将复制好的链接发送给要邀请加入的人
-
受邀人登录github,然后访问链接
-
加入成功后,可以在协作者列表中看到
这里有个不解的现象,在受邀人的仓库列表中看不到加入的项目。
3.8 远程协作
-
Fork项目
-
将Fork后的项目Clone到本地,在本地编写好代码后再推送到远程。
-
pull request