Git使用GitGit

Git学习笔记

2018-03-07  本文已影响16人  DeepChafferer

Git的学习

Git简介
Git由Linux操作系统内核的创造者Linus Torvalds在2005年创造,是目前世界上被最广泛使用的现代软件版本管理系统。Git是一个成熟并处于活跃开发状态的高质量开源项目,目前Git支持绝大多数的操作系统,绝大多数的IDE也对Git有支持。

版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制的种类大致有三种,分为‘本地版本控制’、‘集中化版本控制’以及‘分布式版本控制’。

分布式版本控制系统Git

Git底层对象

Git底层对象的关联

Blob → Tree → Commit

Blob → Tree → Commit

Commit → Branch

Commit → Branch

说明

Git工作的原理

Git文件状态

先来看一张图


Git文件状态

Git文件状态有以下几种

Git工作区域组成

Git区域组成

Git在本地工作去中有三颗文件快照树:

.git目录

在Mac OS X操作系统中这是一个隐藏的目录,我们可以通过快捷键Command + shift + .将其显示出来
当我们用Git命令git init对一个目录进行初始化后便可以看到.git这个文件目录(如图)

.git目录

.git这个目录中包含了几乎所有的Git存储和操作的对象,如果想要复制一个版本库只要将这个目录复制一下即可。下面说明下该目录

Git操作基本流程

Git命令

初次运行Git的配置命令

在计算机上安装好Git后可以定制你的Git环境。每台计算机上只需要配置一次,你也可以在任何时候再次通过运行命令来修改这些配置。

git config --global user.name "xxx"
git config --global user.email "xxx@meituan.com"
git config --list
git config <#key#>
// eg:检查用户名字
git config user.name

一些较为常用的Git命令

// 需要进入你想初始化为Git仓库的目录执行以下命令
git init

该命令将创建一个名为.git的子目录,这个子目录含有你初始化的Git仓库中所有的必须文件,这些文件是Git仓库的骨干。 但是,到此为止我们仅仅是做了一个初始化的操作,项目里的文件还没有被跟踪。

// 一般格式
git add [<options>] [--] <pathspec>...
// 常用的git add 命令
git add -u // 添加仅索引修改或删除的文件,而不是那些创建的文件
git add -u [<path>] // 把path路径中所有被跟踪文件中被修改或者删除的文件的信息添加到索引库当中,省略path即表示在当前目录中
git add -A(--all) // 把当前目录中所有被跟踪的文件中被修改过或已删除的文件和所有未指定的文件信息添加到索引库。
git add . // 把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。

git status // 此条命令会较为详细得展示当前仓库的状态
git status -s // 查看当前仓库状态(简略)
// eg 合并某分支(branchA)到当前分支(master)

// 使用Fast-forward模式(Git默认模式)
git merge branchA
git branch -d branchA

// 禁用Fast-forward模式
git merge --no-ff -m "merge with no-ff" branchA

// 两者的区别:使用Fast-forward,无法知道branchA存在过

说明

  1. 变基有风险,只在本地变基,不要变基服务器上的分支
  2. 变基操作的实质是丢弃一些现有的提交,然后相应地新建一些内容一样但实际上不同的提交。如果有人依赖那些丢弃的提交,会产生问题
  3. 如果有人变基服务器上的分支,其它人更新数据时要执行 git pull --rebase 命令
  4. 只要你把变基命令当作是在推送前清理提交使之整洁的工具,并且只在从未推送至共用仓库的提交上执行变基命令,就不会有多大问题。

git rebasegit merge对比

  1. merge 是一个合并操作,会将两个分支的修改合并在一起,默认操作的情况下会提交合并中修改的内容
  2. merge 的提交历史忠实地记录了实际发生过什么,关注点在真实的提交历史上面
  3. rebase 并没有进行合并操作,只是提取了当前分支的修改,将其复制在了目标分支的最新提交后面
  4. rebase 的提交历史反映了项目过程中发生了什么,关注点在开发过程上面
  5. merge 与 rebase 都是非常强大的分支整合命令,没有优劣之分,使用哪一个应由项目和团队的开发需求决定
  6. 使用 merge 时应考虑是采用 --no-ff 默认操作,生成一个对回顾提交历史并不友好的合并记录,还是采用 --ff-only 方式
  7. rebase 操作会丢弃当前分支已提交的 commit,故不要在已经 push 到远程,和其他人正在协作开发的分支上执行 rebase 操作
  8. 当有修改未 commit 时,不能进行 rebase 操作,此时可以考虑先用 git stash 命令暂存

参考资料

浅析 Git 思想和工作原理

git

上一篇下一篇

猜你喜欢

热点阅读