开发之路: 高效使用Git
一、Git是什么
1. 版本控制
- 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
(版本控制系统VCS:可以理解成一个数据库,帮助我们完整地保存一个项目的快照)
2. 集中式
- 将项目集中存放在中央服务器中,在工作的时候,大家只在自己电脑上操作,从同一个地方下载最新版本,然后开始工作,做完的工作再提交给中央服务器保存。
- 配置库是集中存放在中央服务器,开发者需要先从中央服务器取得最新版本,完成后再推送给中央服务
- SVN: 集中式版本控制系统中的代表
- 存在问题:
需要联网才能工作,从服务器中下载数据,可能会比较慢
3. 分布式
- 分布式也有一个类似于“配置库”的服务器,而作用仅仅是用于交换,有它无它均可继续开发。
- 与集中式比较
-
(1)个人拥有完整的版本库,因此无需联网均可开发
(2)因为每个人都拥有完整地库,所有安全性比较高,单个挂了不会影响其他
(3)SVN能清楚的按目录进行分类管理, 使项目组的管理处于有序高效的状态
(4) SVN更适用于项目管理, Git适用于代码管理
3. Git: 分布式版本控制系统中的代表
-
对比:
二、git,gitlab,github
1. 它们什么关系
- git- 版本控制工具;
- github - 一个网络平台,提供给用户空间存储git仓库,保存用户的一些数据文档或者代码
- gitlab - 基于git的项目管理软件。
2. 关于gitlab使用
选择登录的方式:
Github ,Google账号登录
之后,在git 终端上操作,绑定用户名和email即可操作了
3. Git 三个区
- (1)认识三个区
工作区:就是你在电脑里能看到的目录。
暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
HEAD : 指向的分支
git stash命令用于暂时保存没有提交的工作。运行该命令后,所有没有commit的代码,都会暂时从工作区移除,回到上次commit时的状态。
分支冲突:
Git 标签
Git config --Group 针对当前用户
分支合并的方式:
-
Git merge :
-
Git rebase:
三、Git怎么玩
常用指令
1. Pull 和 Push
- Pull:拉
- Push:推
Pull 是merge 和 fetch的集合,意为拉取远程的数据,并合入本分支
Push 是推的意思,把所做的更改推到远程分支上
git fetch : 与一个远程的仓库交互,并且将远程仓库中有但是在当前仓库的没有的所有信息拉取下来然后存储在你本地数据库中
git merge origin/lite_dev:合并分支
Git pull --rebase : 把代码整到最新
Git fetch origin feature_LongVideo :把远程分支拉到本地
Git pull origin feature_LongVideo :把某分支内容都拉取到本地
2. Git status
: 查看当前分支的状态,主要是所做的一些改动
3. Git log
查看提交日志
4. Git init
初始化
一般多人开发一个需求时是用同一个分支这个时候git pull很有用,我们修bug都是从master新建本地分支,从本地分支pull就会报错
修bug一般都是git pull origin master
和别人一起开发新需求的时候最好设置一下关联,方便直接git pull拉取
分支创建/合并
- 查看分支:git branch
- 创建分支:git branch
- 切换分支:git checkout 或者git switch
- 创建+切换分支:git checkout -b 或者git switch -c
- 删除本地分支:git branch -d
- 删除远端分支:git push origin -D
Git checkout: 取消对某文件的修改,将对文件修改撤回
Git reset:回退,将add文件修改内容回退,commit提交不会包含此修改
提交三连
git add
filename:单个文件
. :当前所有文件
git commit -m “message”:提交
git push:将commit推动远端
提交/回退
-
Git reset --soft
回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可 -
Git reset --hard
彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉
回退指的是回退到上一次的变动,比如之前在本分支提交的是“XXX”,然后pull了远程代码,本地已经有了新的变动,git reset回退的是这一次的pull
- Git reset
总结来看:
Git 常用命令就拉分支,合分支,解决冲突pull,版本回退,查看提交日志,版本差异等
本地提交: commit 远程提交:push
查看 diff
git diff 比较工作区跟暂存区
git diff --cached 比较暂存区跟HEAD
git diff HEAD 比较工作区跟HEAD
修改没add在工作区,add了没commit在暂存区,commit了在HEAD,HEAD指向的就是我们的当前分支
四、Git怎么六起来
主要用什么?
- Xcode git
“M”意味着改变了代码,但是还没有提交git
-
然后run一下,保证代码无问题之后;就会提升“This is a Git tutorial”
现在程序就是:“known good” 状态了 -
提交方法:Source Control\Commit
会出现两个界面,分别对应于修改之后的和原先的 -
新建分支
分支是一种保存一系列Git提交的方式。通过使用不同的分支,你可以将不同功能分隔以减少破坏程序的风险。
高效方向
1. 多用熟能生巧
2. 当然配置一下命令行也是很有必要的,这会让你事半功倍
3. alias 设置命令快捷
怎么耍?
熟悉git 命令的人,可以通过git终端命令,完成一系列·的操作
问题一键通
- Git reset -hard 回退到某个版本
error: pathspec ’ did not match any file(s) known to git
- 查看remote 仓库
拉取,推远程分支
提升:feature_mapLocation 没有上游分支,当前git check -b 没有将其推送到远程分支上
如何查看谁修改
- 第一种方法
Git log 查看提交日志
分支推送问题
- 提交三连:
之后 git push 提示
使用git在本地新建一个分支后,需要做远程分支关联。如果没有关联,git会在下面的操作中提示你显示的添加关联。
关联目的是在执行git pull, git push操作时就不需要指定对应的远程分支,你只要没有显示指定,git pull的时候,就会提示你。
然后,我们再:
Merge 远程分支
Merge 和 pull的区别
查看commit信息
每次提交的信息都一样,说明没有push到远程
说一下push
pull是拉取当前分支到当前所在分支,做的是最新的改动;相当于merge和fetch之和,在这里说明一下:假如我们要合入其它的分支,那么我们可以直接merge远程分支,或者pull下来,在这里我感觉不到区别
偶见Xcode未同步
在shell,Xcode上都查看了git的提交,显示都已经提交上去,但是Xcode未同步
(依然提示蓝线)
关于版本
- Git tag 查看版本
- 切换到某个版本
切到了一个比较奇怪的分支,detach 分离
默认·标签是打在最新提交的commit上的
error: src refspec master does not match any.
出现如下错误:
error: src refspec master does not match any.
error: failed to push some refs to ‘XXXXXX’
原因:
本地仓库为空
拉取远程分支错误
git pull origin bugfix_resource_bundle_master_chn
fatal: Couldn’t find remote ref bugfix_resource_bundle_master_chn
fatal: The remote end hung up unexpectedly
关于head
记住一点就行了HEAD这个指针永远指向最近一次提交,头指针分离了除外
Git config --list // 一些配置参数