Git是一个开源的分布式版本控制系统(也可以叫工具或是软件)。
## 一段历史
Linux之父 Linus Torvalds与BitMover公司创始人Larry McVoy曾是很要好的朋友, BitMover开发了一款还不错的分布式SCM(软件配置管理)软件-Bitkeeper。
基于Linux的影响力,Larry McVoy说服了Linus使用Bitkeeper管理Linux
* 1999年12月, Linux PowerPC项目首 先开始使用BitKeeper;
* 2002年2月,开始用它来管理Linux内核代码主线。
但是作为一个商业付费的软件,虽然提供了一个可以免费使用的精简版本,但是不允许修改。
Linus内核开发从2002年到2005年的3年时间里,使用BitKeeper,Linux的开发步伐加快了两倍。但是作为开源精神的领头羊,使用非自由软体来进行Linux核心代码的管理,除了受到其他自由软件大佬(Richard Stallman)的批评外,Liunx团队内部也是非议很多。
2005年, Samba文件服务器开发人Andrew Tridgell写了链接BitKeeper存储库的简单程序,被Larry McVoy指控对BitKeeper进行逆向工程,Linus多次协调无效,McVoy还是决定停止BitKeeper对Linux的支持。一怒之下,Linus在BitKeeper的使用经验基础上, 在一个周末的时间创造了Git, 将Bitkeeper送入了末路。
## 集中式与分布式:
与其他的版本控管工具相比, Git 最大的特点就是分布式。
与分布式对应的是集中式, 也就是服务器-客户端的模式。这种模式的特点是有一台中央的代码控管服务器, 不同的开发机器作为客户端从服务器获取代码和进行代码提交。
而对于分布式的Git来说, 每个客户端的机器都可以作为代码控管的服务器, 可以进行代码的检出和上传。
但是, Git 也有中央服务器的概念,而且在大部分的状况下都会使用到中央服务器。
对于习惯集中式代码控管工具的开发者来说(比如Perforce), 可以这样来理解集中式:
如果在每台机器的本地安装一个Perforce 服务器, 再到一台共用的服务器上架设一台Perforce服务器作为中央服务器。代码先提交到本地的服务器, 再从本地的服务器汇总到中央服务器。只是Perforce等工具没有这样的功能, Git 做到了。
因为本地也是服务器, 也可以进行提交等动作, 所以不联网也可以进行代码的提交和控管, 等到网络恢复才推送到中央服务器。除此,Git 还支持多种协议和提交方式, 在一些Git的平台上可以使用网页的方式进行代码改动,提交和管理
- 前言
- 第1章 概念篇
- 1.1 版本控管的概念与历史
- 1.2 Git概述
- 1.3 Git 安装
- 1.4 工作区、暂存区和版本库
- 1.5 本地库与中央库
- 1.6 Git术语汇总
- 1.7 GitHub
- 1.8 裸仓库
- 第2章 基于本地库的操作
- 2.1 初始化库
- 2.2 提交代码
- 2.3 日志查看
- 2.4 差异比较
- 2.5 提交撤销
- 2.6 删除文件
- 第3篇 中央库命令及操作
- 3.1 中央库搭建
- 3.1.1 SSH协议中央库搭建
- 3.1.2 SSH协议中央库搭建问题解决
- 3.2 推送远端库
- 3.3 冲突处理
- 第4章 进阶篇
- 4.1 分支与合并
- git整合分支的两种方式 merge 和 rebase
- 最简单的git merge 和git rebase 区别介绍和示例演示
- git merge 合并
- git rebase 变基
- 取消merge
- 4.2 标签
- 4.3 忽略不需要控管的文件
- 4.4 Git工作流程
- 4.5 HEAD 究竟是什么?
- 4.6 .git实现原理解密
- 4.7 代码拉取与提交
- 4.8 查看提交记录
- 查看前一个月提交记录
- 4.9 git reset 和 git revert的区别和适用场景
- 第5章 命令与工具篇
- 5.1 Git常用命令一览
- 5.2 Git命令索引
- git clone
- git init
- git checkout
- git revert
- git reset
- 5.3 Git GUI使用
- 5.4 Git 可视化工具
- 第6章 实战篇
- 6.1 GitHub使用介绍
- 6.2 代码覆盖与冲突解决
- 6.3 Clone项目到非空目录
- 6.4 检出指定的目录-稀疏检出
- 6.5 单个文件的回退
- 回退到指定版本
- 提交丢失场景
- 6.6 常用命令
- 6.7 分支合并
- 最简单最常见的Merge
- 取消单个文件的自动merge
- Excel 文件合并处理
- Pull request
- Bitbucket Pull request
- 分支合并之git merge ,git rebase
- 6.8 已控管文件去除版本控管
- 6.9 本地非空目录与远端库对应
- 6.10 如何使用Gitee 控管代码
- 6.11 提交和分支等记录查询
- git log 提交日志及图形化显示
- 6.12 Linux/Windows 免输密码
- 6.13 嵌套目录的代码控管
- 6.14 从远端Tag新建分支并提交到远端
- 6.15 从本地库撤销已经添加的文件或目录
- 6.16 远端库回退
- 神鬼不知之Git远端库回退更改
- 6.17 merge 之后使用git checkout会导致修改丢失吗
- 6.18 将Git远程仓库中的项目迁移到另一个远程库, So easy
- Git 切换Origin
- 第7章 常见问题及解决
- 7.1 Not a valid object name: ‘master’
- 7.2 error: Pulling is not possible because you have unmerged files.
- 7.3 SSL certificate problem
- 7.4 fatal: ambiguous argument 'HEAD^'
- 7.5 You have not concluded your merge (MERGE_HEAD exists)
- 7.6 Please commit your changes or stash them before you merge.
- 7.7 error: path 'xxx' is unmerged
- 7.8 unable to get local issuer certificate
- 7.9 github 无法取code之WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!问题解决
- 问题收集
- git clone 出现 SSL certificate problem: self signed certificate in certificate chain 问题怎么解决
- This branch is out-of-date with the base branch Merge the latest changes from main into this branch.
- 第8章 快速使用
- 快速
- 参考