Fork me on GitHub

Git简介

Git原理及特性

每个项目都有一个git目录,它是Git用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。

从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件 实际上都是从git目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对 这些文件进行编辑。

所谓的暂存区域只不过是个简单的文件,一般都放在 git 目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。

Git相比于其他版本管理工具的优点

  • 直接快照,而非比较差异
  • 近乎所有操作都可本地执行
  • 时刻保持数据完整性
  • 多数操作仅添加数据
  • 三种状态:已提交(committed),已修改(modified)和已暂存(staged)

基本的 Git 工作流程如下所示:

  1. 在工作目录中修改某些文件。
  2. 对这些修改了的文件作快照,并保存到暂存区域。
  3. 提交更新,将保存在暂存区域的文件快照转储到 git 目录中。

git add命令

这是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:

  • 可以用它开始跟踪新文件,
  • 或者把已跟踪的文件放到暂存区,
  • 还能用于合并时把有冲突的文件标记为已解决状态等

从远程仓库抓取数据

  • git fetchfetch命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
  • git pull,从原始克隆的远端仓库中抓取数据后,自动合并到工作目录中当前分支。

分支的合并

把一个分支整合到另一个分支的办法有两种:merge(合并) 和 rebase(衍合)。

我们假设开发进程分叉到两个不同分支,又各自提交了更新。

最初分叉提交的历史.png

merge合并

使用merge命令,它会把两个分支最新的快照(C3C4)以及二者最新的共同祖先(C2)进行三方合并。

通过Merge整合分支.png

rebase衍合(有人叫变基)

你可以把在C3里产生的变化补丁重新在C4的基础上打一遍。

它的原理是回到两个分支(你所在的分支和你想要衍合进去的分支)的共同祖先,提取你所在分支每次提交时产生的差异,把这些差异分别保存到临时文件里,然后从当前 分支转换到你需要衍合入的分支,依序施用每一个差异补丁文件。

衍合原理示意.png

现在,你可以回到master分支然后进行一次快进合并。

使用衍合时需要注意:
永远不要衍合那些已经推送到公共仓库的更新

一个标准的Git工作流

  1. master 是长期分支,一般用于管理对外发布版本,每个commit对一个 tag,也就是一个发布版本。
  2. develop是长期分支,一般用于作为日常开发汇总,即开发版的代码。
  3. feature是短期分支,一般用于一个新功能的开发。
  4. hotfix是短期分支 ,一般用于正式发布以后,出现bug,需要创建一个分支,进行bug修补。
  5. release是短期分支,一般用于发布正式版本之前(即合并到master分支之前),需要有的预发布的版本进行测试。release分支在经历测试之后,测试确认验收,将会被合并的developmaster

Git使用经验

问题:当你在开发时,发现主分支有了新的提交,该怎么办?
建议:使用衍合,把主分支的更新衍合到你的本地分支!

-------------本文结束感谢您的阅读-------------

本文作者:乔羽 / FightingJoey

发布时间:2017年07月23日 - 18:38

最后更新:2018年09月27日 - 10:09

原始链接:https://fightingjoey.github.io/2017/07/23/开发/Git简介/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!