精通Git

参考链接:

《精通Git》
《阮一峰 的 Git工作流程》
《Pro Git》

起步

原理

git使用的是一种分布式的版本控制结构,通过记录文件快照来实现。

Git仓库之间关系

运行前配置

用户信息(必须)

参数说明文件目录
git config --system对应系统的所有用户的配置/etc/gitconfig文件
git config --global用户目录下的配置~/.gitconfig
git config当前git目录的配置.
1
2
git config --global user.name "shuihan"
git config --global user.email lxq_xsyu@163.com

用户名称和电子邮箱,git每次提交的时候都会引用这两条信息,说明是谁提交了代码。

默认编辑器

1
git config --global core.editor emacs

差异分析工具

1
git config --global merge.tool vimdiff

查看配置信息

1
git config --list

获取帮助

1
git help <verb>

例如,config 命令可以使用 git help config

基础

获取仓库

创建新仓库: git init

初始化后,当前目录下就会多出一个.git的目录,所有git需要的数据和资源都存放在这个目录中。

1
2
git add *.java
git commit -m "init project"

克隆仓库: git clone

1
git clone git://github.com/test/gittest.git

这样默认目录会是gittest,如果要更改目录名称可以追加在后面。

1
git clone git://github.com/test/gittest.git newname

检查文件状态

git status

查看文件变化

暂存前: git diff
暂存后: git diff --cached

跳过暂存区 -a

1
git commit -a -m "跳过暂存区提交"

移除文件

git rm 文件名

如果只想删除仓库中的文件(也会从暂存区移除)但任然保留工作区文件,可以使用 git rm –cached 文件名(比如删除不小心纳入仓库的需要忽略的文件)

移动文件

1
git mv file_from file_to

查看提交历史

git log

git log 有许多可选项帮助搜寻感兴趣的提交:

显式文件提交的内容差异: git log -p -2 //-2表示仅仅显式最近的两次更新

显式文件提交的内容差异(单词层面比较):git log -p -word-diff -2

修改最后一次提交

有时候我们提交完了,但是发现漏掉了几个文件,或者提交信息写错了,想要撤销刚才的提交,可以使用–amend 追加提交暂存区

git commit --amend

取消暂存的文件

git reset HEAD 暂存区文件名

取消对文件的修改

git checkout -- 已经修改的文件名

查看远程仓库

git remote -v

添加远程仓库

git remote add [shortname] [url]

1
2
3
4
5
6
$ git remote 
orign
$ git remote add pb git://github.com/pp/ppt.git
$ git remote -v
orgin git://github.com/test/gittest.git
pb git://github.com/pp/ppt.git

此时,本地仓库没有pb的信息,可以使用 git fetch pb

从远程仓库抓取数据

git fetch [remote-name]

推送数据到远程仓库

git push origin master

查看远程仓库信息

git remote show origin

远程仓库删除和重命名

1
2
3
4
$ git remote rename pb paul
$ git remote
orgin
paul

删除远程仓库可以使用 git remote rm

1
2
3
$ git remote rm paul
$ git remote
orgin

打标签

显示已有标签

git tag

可以使用通配符检索

1
git tag -l 'v1.2.*'

新建标签

git使用的标签有两种:轻量级的和含附注的。

创建轻量级标签:

git tag v1.3.1

创建一个含附注的标签,用 -a

1
$ git tag -a v1.3.0 -m "这是版本1.3.0"

可以使用show命令查看相应标签的版本信息: git show v1.3.0

分享标签

默认情况下,git push 并不能把标签传送到服务器,要使用命令:git push origin [tagname]

1
$ git push origin v1.3.0

如果要把本地所有标签传送上去,可以使用 –tags

1
$ git push origin --tags

分支

分支的理解

假设此时我们的工作目录有三个文件,把它们暂存后提交。

第一步:暂存 git使用blob类型的对象存储了这些快照

第二步:提交

1
2
git add *
git commit -m "commit three files"

此时git仓库中有5个对象(三个文件快照内容的blob对象,一个记录着目录树内容及其各个文件对应blob对象索引的tree对象,一个指向tree对象的索引和其他提交信息数据的commit对象)

Git分支和目录树

第三步:多做几次修改再提交 后一次提交的commit对象会指向前一次提交的commit对象

Git分支和目录树

git中的分支实际上仅仅是一个指向commit对象的可变指针,git会使用master为分支的默认名字,每次提交后master(当前分支)都会自动向前移动。

Git分支和目录树

第四步:创建一个新分支

1
$ git branch testing

Git分支和目录树

那么git是如何知道你在哪个分支上工作呢?它保留着一个名为HEAD的特别指针。

Git分支和目录树

第五步:切换分支

1
$ git checkout testing

这样HEAD就指向了testing分支。

分支合并

使用命令 git merge 来合并分支

Git分支和目录树

1
2
3
4
$ git checkout master
$ git merge hotfix

Fast-forward

合并的时候出现了”Fast-forward”提示,因为此时只需要简单的将指针右移,这种合并称为快进(Fast Forward)

再来看一种情况:

Git分支和目录树

1
2
$ git checkout master
$ git merge iss53

这种情况不可能简单的右移指针,会自动创建一个指向它的commit对象(如下图c6),如果有冲突需要合并冲突。

Git分支和目录树

分支管理

git branch命令可以列出当前所有分支清单, 当前分支带“*”号

查看各个分支最后一个提交对象的信息: git branch -v

工作流程

Git flow

该流程中项目存在两个长期分支。

主分支: master (存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版)
开发分支: develop (用于日常开发,存放最新的开发版)

其次,项目存在三种短期分支。

功能分支(feature branch)
补丁分支(hotfix branch)
预发分支(release branch)

一旦完成开发,它们就会被合并进develop或master,然后被删除。

GitFlow

关于Git的工作流其他请阅读 阮一峰 的博客,总结的很详细:

Git 工作流程
Git分支管理策略

评论

Ajax Android AndroidStudio Animation Anroid Studio AppBarLayout Banner Buffer Bulma ByteBuffer C++ C11 C89 C99 CDN CMYK COM1 COM2 CSS Camera Raw, 直方图 Chrome ContentProvider CoordinatorLayout C语言 DML DOM Dagger Dagger2 Darktable Demo Document DownloadManage Element Error Exception Extensions File FileProvider Fresco GCC Git GitHub GitLab Gradle Groovy HTML5 Handler HandlerThread Hexo Hybrid I/O IDEA IO ImageMagick IntelliJ Intellij Interpolator JCenter JNI JS Java JavaScript JsBridge Kotlin Lab Lambda Lifecycle Lint Linux Looper MQTT MVC MVP Maven MessageQueue Modbus Momentum MySQL NDK NIO NexT Next Nodejs ObjectAnimator Oracle VM Permission PhotoShop Physics Python RGB RS-232 RTU Remote-SSH Retrofit Runnable RxAndroid RxJava SE0 SSH Spring SpringBoot Statubar Task Theme Thread Tkinter UI UIKit UML VM virtualBox VS Code ValueAnimator ViewPropertyAnimator Web Web前端 Workbench api apk bookmark by关键字 compileOnly css c语言 databases demo hexo hotfix html iOS icarus implementation init jQuery javascript launchModel logo merge mvp offset photos pug query rxjava2 scss servlet shell svg tkinter tomcat transition unicode utf-8 vector virtual box vscode 七牛 下载 中介者模式 串口 临潼石榴 主题 书签 事件 享元模式 仓库 代理模式 位运算 依赖注入 修改,tables 光和色 内存 内核 内部分享 函数 函数式编程 分支 分析 创建 删除 动画 单例模式 压缩图片 发布 可空性 合并 同向性 后期 启动模式 命令 命令模式 响应式 响应式编程 图层 图床 图片压缩 图片处理 图片轮播 地球 域名 基础 增加 备忘录模式 外观模式 多线程 大爆炸 天气APP 太白山 头文件 奇点 字符串 字符集 存储引擎 宇宙 宏定义 实践 属性 属性动画 岐山擀面皮 岐山肉臊子 岐山香醋 工具 工厂模式 年终总结 开发技巧 异常 弱引用 恒星 打包 技巧 指针 插件 摄影 操作系统 攻略 故事 数据库 数据类型 数组 文件 新功能 旅行 旋转木马 时序图 时空 时间简史 曲线 杂谈 权限 枚举 架构 查询 标准库 标签选择器 样式 核心 框架 案例 桥接模式 检测工具 模块化 模板引擎 模板方法模式 油泼辣子 泛型 洛川苹果 浅色状态栏 源码 瀑布流 热修复 版本 版本控制 状态栏 状态模式 生活 留言板 相册 相对论 眉县猕猴桃 知识点 码云 磁盘 科学 笔记 策略模式 类图 系统,发行版, GNU 索引 组件 组合模式 结构 结构体 编码 网易云信 网格布局 网站广播 网站通知 网络 美化 联合 膨胀的宇宙 自定义 自定义View 自定义插件 蒙版 虚拟 虚拟机 补码 补齐 表单 表达式 装饰模式 西安 观察者模式 规范 视图 视频 解耦器模式 设计 设计原则 设计模式 访问者模式 语法 责任链模式 贪吃蛇 转换 软件工程 软引用 运算符 迭代子模式 适配器模式 选择器 通信 通道 配置 链表 锐化 错误 键盘 闭包 降噪 陕西地方特产 面向对象 项目优化 项目构建 黑洞
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×