02.源代码管理之Git命令的使用
@(〓〓 iOS-实用技术)[代码管理 Git/SVN]
- 作者: Liwx
- 邮箱: 1032282633@qq.com
目录
- 02.源代码管理之Git命令的使用
- 2.Git命令行演练-个人开发
- 2.1 如何学习git指令
- 2.2 初始化创建本地仓库
- 2.3 个人开发基本演练
- 2.4 Git的基本常识
- 3.Git命令行演练-团队开发
- 3.1 共享库分类
- 3.2 搭建本地共享库
- 3.3 演示团队多人开发
- 3.4 Git补充
- 4.Git常用命令
- 4.1 查看、添加、提交、删除、找回,重置修改文件
- 4.2 查看文件diff
- 4.3 查看提交记录
- 4.4 查看、切换、创建和删除分支
- 4.5 Git暂存管理
- 4.6 Git远程分支管理
- 4.7 Git远程仓库管理
- 5.Git资源推荐
2.Git命令行演练-个人开发
2.1 如何学习git指令
- git help [子命令] 帮助指令
和学习SVN指令是一样的,只不过git是通过使用指南的形式展示给用户看(不能编辑的vim编辑器),使用q退出vim编辑器,按空格进入下一页,ctrl + B 回到上一页; /关键字 进行搜索
2.2 初始化创建本地仓库
-
1.创建LocalServer文件夹.用于存放本地仓库和工作空间.
-
在终端中使用cd指令进入LocalServer文件夹
命令:
cd /Users/liwx/Desktop/Tmp/Git/LocalServer
-
-
2.初始化本地仓库
-
描述: 使用以下命令会生成一个
.git文件夹
(本地代码仓库
)- 作用:
.git文件夹
是用来管理本地代码,修改上传,版本回退.
命令:
git init
- 作用:
-
-
3.配置仓库信息
-
3.1 配置Git仓库用户.假设创建liwx用户.
- 作用: 追踪修改更新记录.
命令:
git config user.name "liwx"
-
3.2 配置用户邮箱
- 作用: 多人合作开发时, 沟通交流
命令:
git config user.email "1032282633@qq.com"
-
3.3 查看配置信息(.git -> config打开)
- 作用: 查看信息是否配置成功
命令:
git config -l
-
3.4 也可以在.git文件的config文件中查看配置结果
-
- 创建本地仓库如图所示
2.3 个人开发基本演练
- 1.创建文件并提交到本地仓库
-
1.1 创建main.m
命令:
touch main.m
-
1.2 添加到
stage暂存区
命令:
git add ."
-
1.3 提交到HEAD指向的分支(
HEAD默认执行master主分支
)命令:
git commit -m "创建main.m文件"
-
操作如图
-
- 2.修改文件并提交到本地仓库
-
2.1 修改main.m文件的内容
-
2.2 添加到
stage暂存区
命令:
git add .
-
2.3 将修改的文件提交到本地仓库
命令:
git commit -m "修改了main.m文件"
-
操作如图
-
- 3.删除文件并提交到本地仓库
-
3.1 删除文件并提交
命令:
git rm main.m
-
3.2 将删除文件提交到本地仓库
命令:
git commit -m "删除了main.m文件"
-
操作如图
-
- 4.日志查看
-
4.1 查看日志(查看Git的更新日志和
40位哈希值版本号
)命令:
git log
-
4.2 查看日志(查看到Git的更新日志和
7位哈希值版本号
)命令:
git reflog
-
操作如图
-
- 5.版本回退
-
代码版本回退
重置到当前版本:
git reset —-hard HEAD
重置到上上个版本:git reset —-hard HEAD^^
重置到往上3个版本:git reset ——hard HEAD~3
重置到指定版本:git reset —-hard 七位版本号
-
- 6.查看文件状态
-
1.1 查询文件状态
- 红色: 代表被添加或者修改的文件没有被添加到暂缓区
- 绿色: 代表文件在暂缓区,等待提交
命令:
git status
-
2.4 Git的基本常识
- 1.文件状态(git status)
-
颜色含义
红色: 代表被添加或者修改的文件没有被添加到暂缓区
绿色: 代表文件在暂缓区,等待提交 -
版本号的含义
版本号
是一个由SHA1生成的40位哈希值
这样做的目的是保证版本号的唯一
-
-
2.日志查看配置
命令:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)\<%an\>%Creset' --abbrev-commit"
-
3.配置别名
- 3.1 设置status命令的别名为st
命令:
git config alias.st "status"
- 3.2 设置commit命令的别名为ci
命令:
git config alias.ci "commit -m"
-
4.--global的作用
- 4.1 可以进行全局配置,所有的版本库共享此配置
查看全局配置(
桌面前往->个人->.gitconfig
)
个人电脑上建议使用全局配置
3.Git命令行演练-团队开发
团队开发必须有一个共享库,这样成员之间才可以进行协作开发
-
Git下载和提交命令介绍
- 1.下载代码
命令:
git clone 本地代码仓库地址
- 2.提交(推送)代码到共享库
命令:
git push
- 3.更新共享库代码到本地
命令:
git pull
3.1 共享库分类
-
1.
本地共享库
(只能在本地进行操作)电脑文件夹/U盘/移动硬盘
-
2.
远程共享库
(可通过网络远程操作)-
2.1 自己搭建Git服务器(不建议)
-
2.2 在Github上托管项目(建议)
Github网址(https://github.com); 公开项目免费, 私有项目收费
-
2.3 在OSChina上托管项目(推荐)
OSChina网址(https://git.oschina.net) 安全免费,在国内访问速度快
-
3.2 搭建本地共享库
- 1.创建TeamServer文件夹,并进入到TeamServer文件夹内,初始化创建本地共享库
-
作用: 团队多人开发
命令:
git init --bare
-
结果: 执行完以上命令,生成以下文件和文件夹
-
3.3 演示团队多人开发
以下列举三个角色来进行演示多人开发.分别为项目经理
Manager
,程序猿一CoderOne
,程序猿二CoderTwo
.
- 1.创建文件夹
Manager
,CoderOne
,CoderTwo
.
- 2.项目经理搭建项目结构
-
2.1 项目经理从共享库
clone项目到本地
命令:
git clone /Users/liwx/Desktop/Tmp/Git/TeamServer
-
2.2 项目经理搭建好项目结构,使用
push
,提交到共享库.- 1.进入项目经理的Manager/TeamServer文件夹下创建iOS,Android,Server文件夹
命令: mkdir iOS Android Server
- 2.项目经理进入iOS文件夹内创建main.m,并提交到共享库
1:
touch main.m
2:git add .
3:git commit -m "创建main.m文件"
4:git push
- 3.以上操作如图所示
-
-
3.CoderOne和CoderTwo分别clone下载TeamServer仓库到各自的文件夹
命令:
git clone /Users/liwx/Desktop/Tmp/Git/TeamServer
-
4.演练CoderOne新增文件CoderTwo更新
-
4.1 CoderOne新增文件,并提交共享库
1: touch Person.h
2: git add .
3: git commit -m "创建Person.h文件"
4: git push -
4.2 CoderTwo更新仓库
1: git pull
-
-
5.CoderOne删除文件,CoderTwo同步更新
-
5.1 CoderOne新增文件,并提交共享库
1: git rm Person.h
2: git commit -m "删除Person.h文件"
3: git push -
5.2 CoderTwo更新仓库
1: git pull
-
-
6.超时和冲突演练,CoderOne和CoderTwo同时修改main.m第一行内容
-
6.1 CoderOne先修改完提交到共享库
1: git add .
2: git commit -m "CoderOne修改了main.m第一行内容"
3: git push -
6.2 CoderTwo后修改完提交到共享库,执行到第3步此时会提示文件过期(超时)
fetch first
1: git add .
2: git commit -m "CoderTwo修改了main.m第一行内容"
3: git push -
6.3 CoderTwo执行git pull更新时,产生冲突
1: git pull
- main.m冲突内容
<<<<<<< HEAD // CoderTwo修改了main.m第一行内容 ======= // CoderOne修改main.m文件 >>>>>>> 081af32dbb358ba0470ae0ff996987b050037027
- 修改main.m冲突后
// CoderTwo修改了main.m第一行内容 // CoderOne修改main.m文件
-
6.4 CoderTwo解决冲突后提交到共享库
1: git add .
2: git commit -m "解决main.m冲突"
3: git push
-
-
7.CoderTwo演练添加忽略文件.gitignore
- 7.1 从GitHub下载Objective-c的忽略文件.gitignore放到自己本地仓库的iOS文件夹中.链接: https://github.com/github/gitignore/blob/master/Objective-C.gitignore.将Objective-C.gitignore内容复制到创建的.gitignore文件中并保存.提交.gitignore文件到共享库
1: touch .gitignore
2: git add .
3: git commit -m "添加.gitignore忽略文件"
4: git push
3.4 Git补充
- 关于忽略文件
在真实开发中,配置.gitignore文件 , 去github里面搜索gitignore
选择Objective-C.gitignore版本的,拷贝到本地仓库即可,记得添加到本地版本库
- 常见问题
fetch first 代表当前文件过期
,需要从远程共享库更新
命令: git pull
4.Git常用命令
4.1 查看、添加、提交、删除、找回,重置修改文件
- 查看、添加、提交、删除、找回,重置修改文件
- 查看
git show
# 显示某次提交的内容 git show $id
- 添加
git add <file>
# 将工作文件修改提交到本地暂存区
git add .
# 将所有修改过的工作文件提交暂存区
- 删除
git rm <file>
# 从版本库中删除文件
git rm <file>
--cached # 从版本库中删除文件,但不删除文件
- 重置
git reset <file>
# 从暂存区恢复到工作文件
git reset -- .
# 从暂存区恢复到工作文件
git reset --hard
# 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
- 恢复
git revert <$id>
# 恢复某次提交的状态,恢复动作本身也创建次提交对象
git revert HEAD
# 恢复最后一次提交的状态
4.2 查看文件diff
git diff <file>
# 比较当前文件和暂存区文件差异 git diff
git diff <branch1>..<branch2>
# 在两个分支之间比较
git diff --staged
# 比较暂存区和版本库差异
git diff --cached
# 比较暂存区和版本库差异
git diff --stat
# 仅仅比较统计信息
4.3 查看提交记录
git log git log <file>
# 查看该文件每次提交记录
git log -p <file>
# 查看每次详细修改内容的diff
git log -p -2
# 查看最近两次详细修改内容的diff
git log --stat
#查看提交统计信息
tig
Mac上可以使用tig代替diff和log
,brew install tig
4.4 查看、切换、创建和删除分支
- 查看分支
git branch -r
# 查看远程分支
git branch <new_branch>
# 创建新的分支
git branch -v
# 查看各个分支最后提交信息
git branch --merged
# 查看已经被合并到当前分支的分支
git branch --no-merged
# 查看尚未被合并到当前分支的分支
- 切换分支
git checkout <branch>
# 切换到某个分支
- 创建分支
git checkout -b <new_branch>
# 创建新的分支,并且切换过去
git checkout -b <new_branch> <branch>
# 基于branch创建新的new_branch
git checkout $id
# 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
git checkout $id -b <new_branch>
# 把某次历史提交记录checkout出来,创建成一个分支
- 删除分支
git branch -d <branch>
# 删除某个分支
git branch -D <branch>
# 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
- 分支合并和rebase
git merge <branch>
# 将branch分支合并到当前分支
git merge origin/master --no-ff
# 不要Fast-Foward合并,这样可以生成merge提交
git rebase master <branch>
# 将master rebase到branch,相当于:git co <branch> && git rebase master && git co master && git merge <branch>
4.5 Git暂存管理
git stash
# 暂存
git stash list
# 列所有stash
git stash apply
# 恢复暂存的内容
git stash drop
# 删除暂存区
4.6 Git远程分支管理
- 远程分支抓取
git pull
# 抓取远程仓库所有分支更新并合并到本地
git pull --no-ff
# 抓取远程仓库所有分支更新并合并到本地,不要快进合并
git fetch origin
# 抓取远程仓库更新
git merge origin/master
# 将远程主分支合并到本地当前分支
git checkout --track origin/branch
# 跟踪某个远程分支创建相应的本地分支
git checkout -b <local_branch> origin/<remote_branch>
# 基于远程分支创建本地分支,功能同上
- push远程分支
git push
# push所有分支
git push origin master
# 将本地主分支推到远程主分支
git push -u origin master
# 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
git push origin <local_branch>
# 创建远程分支, origin是远程仓库名
git push origin <local_branch>:<remote_branch>
# 创建远程分支
git push origin :<remote_branch>
#先删除本地分支(git br -d <branch>),然后再push删除远程分支
4.7 Git远程仓库管理
- Git远程仓库管理
git remote -v
# 查看远程服务器地址和仓库名称
git remote show origin
# 查看远程服务器仓库状态
git remote add origin git@ github:robbin/robbin_site.git
# 添加远程仓库地址
git remote set-url origin git@ github.com:robbin/robbin_site.git
# 设置远程仓库地址(用于修改远程仓库地址)
git remote rm <repository>
# 删除远程仓库
5.Git资源推荐
- Git版本控制软件结合GitHub从入门到精通常用命令学习手册
- Git官方中文手册