层级关系
工作区(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 commits b10e9fc second commits 99a0294 third commit
下面的意思就是把第三次、第二次提交的commit合并到第一次的提交上。
wq保留后,进入正文批改界面:
删除之前的commit正文,增加合并后的正文,最终编辑成果如下:
查看 log
曾经合并了
5.Git命令行操作
5.1本地库初始化
进入文件夹
git init留神:生成的 .git 目录中寄存的是本地库相干文件,不要删除
5.2设置签名
我的项目(仓库)级别
仅在以后本地库无效
git config user.name tom #设置用户名tomgit config user.email liu@qq.com #设置用户邮箱
零碎用户级别
仅在以后登录的操作系统用户无效
git config --global user.name tomgit 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 branchgit 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 #删除taggit push origin --tags #将本地tag信息推送到近程库git pull origin --tags #拉取到本地git checkout v.10 #切换taggit 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 的性能以达到代码审核的目标。 安全可靠地治理大团队的开发者