层级关系
工作区(add) –> 暂存区(commit) –> 本地库(push) –> 近程库
1. 从近程库获取最新代码合并到本地
// 查问以后近程的版本
$ git remote -v
// 获取最新代码到本地(本地以后分支为[branch],获取的远端的分支为[origin/branch])
$ git fetch origin master [示例 1:获取远端的 origin/master 分支]
$ git fetch origin dev [示例 2:获取远端的 origin/dev 分支]
// 查看版本差别
$ git log -p master..origin/master [示例 1:查看本地 master 与远端 origin/master 的版本差别]
$ git log -p dev..origin/dev [示例 2:查看本地 dev 与远端 origin/dev 的版本差别]
// 合并最新代码到本地分支
$ git merge origin/master [示例 1:合并远端分支 origin/master 到以后分支]
$ git merge origin/dev [示例 2:合并远端分支 origin/dev 到以后分支]
2. 本地创立分支,并同步近程分支的内容
$ git branch --track master origin/master [示例:本地建设 master 分支,并下载 / 关联近程 orgin/master]
3.Git 根底 – tag
每一个提交都有一个 commitID
,然而每次记录commitID
都很简单,应用 git tag
能够在一些重要的版本和批改中退出一个标识,能够很疾速的找到咱们须要的版本。
tag 和 branch 的相互配合应用,有时候起到十分不便的成果,例如 曾经公布了 v1.0 v2.0 v3.0 三个版本,这个时候,我忽然想不改现有代码的前提下,在 v2.0 的根底上加个新性能,作为 v4.0 公布。就能够 检出 v2.0 的代码作为一个 branch,而后作为开发分支。
Git 根底 – 打标签
4. 合并多条 commit
- 因为开发中各种批改,本地分支屡次 commit。最初提交 master 后,会看到乌七八糟的所有增量批改历史。
$ git rebase -i [startpoint] [endpoint]
- - i 的意思是 --interactive,即弹出交互式的界面让用户编辑实现合并操作。- [startpoint] [endpoint]则指定了一个合并的区间。- 如果不指定[endpoint],则该区间的起点默认是以后分支 HEAD 所指向的 commit。
示例:现须要合并三个 commit(first、second、third)
执行 git rebase -i f123956
进入交互界面。
依据咱们的需要,咱们将 commit 内容编辑如下:
pick 4d32374 first commit
s b10e9fc second commit
s 99a0294 third commit
下面的意思就是把第三次、第二次提交的 commit 合并到第一次的提交上。
wq 保留后,进入正文批改界面:
删除之前的 commit 正文,增加合并后的正文,最终编辑成果如下:
查看 log
曾经合并了
5.Git 命令行操作
5.1 本地库初始化
进入文件夹
git init
留神:生成的 .git 目录中寄存的是本地库相干文件,不要删除
5.2 设置签名
-
我的项目 (仓库) 级别
仅在以后本地库无效
git config user.name tom #设置用户名 tom git config user.email liu@qq.com #设置用户邮箱
-
零碎用户级别
仅在以后登录的操作系统用户无效
git config --global user.name tom git config --global user.email liu@qq.com
仅仅加了一个
--global
优先级别:
我的项目级别
>零碎级别
信息保留地位:
~/.gitconfig 文件
5.3 基本操作
5.3.1 状态查看
git status #查看工作区、暂存区状态
5.3.2 增加
git add fileName #指定文件
git add . #所有
阐明:将工作区的文件增加到暂存区
5.3.3 提交
git commit -m 'commit message' fileName
阐明:将暂存区内容提交到本地库
5.3.4 查看历史记录
git log
git reflog #罕用
git log --greph #图形显示, 更直观
git log --pretty=oneline #丑陋一行显示
git log --oneline #简洁显示
阐明:HEAD@{挪动到以后版本须要多少步},HEAD 示意以后地位
5.3.5 后退后退
-
基于索引值
举荐
git reset --hard 指针地位 例子:git reset --hard a6ace91 #回到这个状态 阐明:通过 git relog 查看历史记录
5.3.6 reset 的三个参数比拟
soft:
- 仅本地库挪动 HEAD 指针
mixed:
- 在本地库挪动 HEAD 指针
- 重置暂存区
hard:
- 在本地库挪动 HEAD 指针
- 重置暂存区
- 重置工作区
5.3.7 删除文件并找回
- 相当于建设一个快照,尽管删除了,但只有增加到暂存区,就能找回
git reset --hard 指针地位
5.3.8 文件差别比拟
git diff 文件名
git diff 哈希值 文件名 #和历史中的一个版本比拟
git diff #不带文件名,则比拟多个文件
5.4 分支治理
fix
master
feature/x
feature/y
5.4.1 什么是分支治理
- 在版本控制中,应用推动多个工作
5.4.2 分支的益处
- 同时并行推动多个性能开发,进步开发效率
- 某一分支开发失败,不会对其它分支有任何影响
5.4.3 分支操作
- 创立分支
git branch 分支名
- 查看分支
git branch
git branch -v
- 切换分支
git checkout 分支名
git checkout -b 分支名 #创立分支并间接切换到该分支
- 合并分支
相当于把批改了的文件拉过来
git merge xxx
留神:合并分支的时候要明确谁谁合并
我在 a 分支外面批改了。要合并到 master,就先切换到 master,而后合并 a
- 删除分支
git branch -d 分支名
5.4.4 解决抵触
- 抵触的体现
-
抵触的解决
- 第一步:编辑,删除非凡标记
<<<
===
- 第二步:批改到称心地位,保留退出
- 第三步:增加到缓存区
git add 文件名
- 第四步:提交到本地库
git commit -m '日志信息'
留神:前面肯定不能带文件名
- 第一步:编辑,删除非凡标记
6.Git 联合 Github
别名 分支名
6.1 创立近程库地址别名
git remote -v #查看近程地址别名
git remote add 别名 近程地址
例子:git remote add origin https://xx
6.2 推送
开发批改完把本地库的文件推送到近程仓库
前提是提交到了本地库才能够推送
git push 别名 分支名
git push -u 别名 分支名 #- u 指定默认主机
例子:git push origin master
6.3 克隆
残缺的把近程库克隆到本地
克隆下来后不要在主分支外面做开发
clone 进行一次,从无到有的过程,更新用 pull
git clone 近程地址
例子:git clone https://xx
6.4 拉取
本地存在 clone 下来的文件 就用 pull 更新
pull = fetch + merge
git fetch 别名 分支名
git merge 别名 分支名
git pull 别名 分支名
6.5 解决抵触
留神:解决抵触后的提交是不能带文件名的
如果不是基于近程库最新版做的批改不能推送,必须先 pull 下来装置抵触方法解决
6.6 rebase
提交记录简洁不分叉
没学懂,感觉有点鸡肋
混眼生
git rebase -i 索引号
git rebase -i HEAD~3 #合并最近三条记录
阐明:在 vim 编辑外面改成 s
6.7 beyond compare
用软件解决抵触
1. 装置:beyond compare
2. 配置:git config --local merge.tool bc3 #合并名称
git config --local mergetool.path '/usr/local/bin/bcomp' #软件门路
git config --local mergetool.keepBackup false #False 不必保留备份
3. 利用:git mergetool
阐明:--local 指只在以后操作系统无效
6.8 跨团队单干
代码 review 之后合并
-
实用于集体
邀请成员 :
Settings
–>Collaborators
–>填写用户名
–>关上链接承受邀请
- 企业
创立一个组织
方便管理
-
review
组织做 review
通过 Pull request
-
给开源社区共享代码
点击他人仓库的 fork 到本人的仓库
— >而后 clone 下来 批改后推送到近程库
–>点击 Pull Request 申请
–>Create pull request 发消息
6.9 Tag 标签
为了清晰的版本治理,公司个别不会间接应用 commit 提交
git tag -a v1.0 -m '版本介绍' #创立本地 tag 信息
git tag -d v1.0 #删除 tag
git push origin --tags #将本地 tag 信息推送到近程库
git pull origin --tags #拉取到本地
git checkout v.10 #切换 tag
git clone -b v0.1 地址 #指定 tag 下载代码
6.10 SSH 免密登录
- 输出:
ssh-keygen -t rsa -C GitHub 邮箱地址
- 进入
.ssh
目录,复制id_rsa.pub
文件内容 - 登录 GitHub。
Settings
–>SSH and GPG keys
–>New SSH Key
- 回到 git 通过 ssh 地址创立。
git remote add 别名 SSH 地址
7.Git 工作流
7.1 概念
在我的项目开发过程中应用 Git 的形式
7.2 分类
7.2.1 集中式工作流
像 SVN 一样,集中式工作流有一个地方仓库,所有的批改都提交到了 Master 分支上
7.2.2 GitFlow 工作流 *
骨干分支master
开发分支develop
修复分支hotfix
预公布分支release
性能分支feature
GitFlow 有独立的分支,让公布迭代过程更晦涩。
7.2.3 Forking 工作流
在 GitFlow 根底上,充分利用了 Git 的 Fork 和 pull request 的性能以达到代码审核的目标。安全可靠地治理大团队的开发者