这个标题其实有些让人费解,因为会想这个提交是动词还是名称?

    提交动作是通过git commit命令来实现的,提交之后会在对象库中新增一个提交对象。提交过程中会发生哪些变化,在上一篇笔记里面已经介绍过,看下那几张过程图就可以了。

    需要明确的是,在Git中,版本库的变更和提交是一一对应的关系,也就是说,提交是将变更引入到版本库的唯一方法。

    Git在提交时,会记录索引的快照并把快照存放到对象库中。下一次提交前,就会将当前索引中的状态与上一次生成的快照进行对比,派生出一个受影响的文件和目录列表。

一、原子变更集:

      每一个提交都代表一个相对于之前的状态的单个原子变更集,提交时要么成功,要么全部拒绝。

二、识别提交:

     这一节主要介绍的是提交在Git中的表示方式,包括显式引用和隐式引用。比如,一个40位的SHA1码就是显式引用,HEAD就是一个隐式引用。

     这里将要介绍各种引用的不同书写方法。

  • 绝对提交名:其实就是散列标识符。可以使用下面的命令来查看。
[root@flower1 committest]# git log -1 --pretty=oneline HEAD
2a9b52785b94c45852276c4febb4e05d9e25de1f new data ty
[root@flower1 committest]# git log -1 --pretty=oneline 2a9b
2a9b52785b94c45852276c4febb4e05d9e25de1f new data ty
  • 引用和符号引用:本地特征分支名称、远程跟踪分支名称和标签名都是引用。目录中有3种不同的命名空间表示不同的引用:refs/heads/ref代码本地分支, refs/remotes/ref代表远程跟踪分支,refs/tags/ref代表标签。
[root@flower1 committest]# find .git/refs/
.git/refs/
.git/refs/tags
.git/refs/heads
.git/refs/heads/master
.git/refs/remotes/ref
.git/refs/remotes/ref/HEAD
  • 相对提交名:看下面的例子就知道了。

 

 

 

 

 

 

 

 

 

C^1:等同于C^,表示提交C的第一父提交。

C^2:表示提交C的第二父提交。

C~1:等同于C~,表示提交C的第一个父提交。

C~2:表示提交C的第一个祖父提交。

C~3:表示提交C的第一个曾祖父提交。

C~3^2^2^:表示提交C的第一个曾祖父提交--的--第二父提交--的--第二父提交--的--第一父提交。

这里会用到的git命令如下:

[root@flower1 my_website]# git rev-parse master
e4db73549d3e9289b8ec9c5ec325e1a672942f28
[root@flower1 my_website]# git show-branch --more=35 | tail -10
[master] rename2
[master^] rename
[master~2] test
[master~3] remove
[master~4] test
[master~5] Remove a poem
[master~6] this is poem, the second file added!
[master~7] firsr change
[master~8] Initial contents of public_html
[root@flower1 my_website]# git rev-parse master~6
3df360e031a40a3c7e35856ed4f0b8f63551c89b

 

三、提交历史记录:

1、查看旧提交:

    这里看几个示例命令就行了。

[root@flower1 my_website]# git log master

   [root@flower1 my_website]# git log --pretty=short --abbrev-commit master~6 master~3

   [root@flower1 my_website]# git log --pretty=short --stat master~6 master~4

2、提交图:

 

四、查找提交:

使用下列工具,暂不关注:

  • git bisect
  • git blame
  • Pickaxe

Git版本控制管理学习笔记5-提交的更多相关文章

  1. Git版本控制管理学习笔记3-基本的Git概念

    为了更近一步的学习和理解Git的理念,这一节介绍一下Git中的一些基本概念. 基本概念 对象库图示 Git在工作时的概念 一.基本概念: 1.版本库:     Git的版本库就是一个简单的数据库,其中 ...

  2. Git版本控制管理学习笔记1-介绍

    几乎所有的版本控制工具都是出于同样的目的:开发以及维护开发出来的代码,方便读取代码的历史,记录所有的修改.这里,介绍的是当前在开源社区内非常流行的版本控制工具Git.它是由Linus Torvalds ...

  3. Git版本控制管理学习笔记4-文件管理和索引

        可以认为使用Git时,我们会遇到3个空间:工作目录.索引.版本库.我们关心的,就是在新建.修改等操作时,这三者之间发生了怎样的变化.     笼统的讲,就是在工作目录下编辑,在索引中积累修改, ...

  4. Git版本控制管理学习笔记2--起步

    首先确保系统中已经安装了git,这里使用的linux系统. 一.命令行初步使用: 1.git命令: 列出它的选项和最常用的子命令.标准命令格式中,COMMAND代表的就是下面列出的子命令. [root ...

  5. Git 版本控制工具(学习笔记)

    GIT(分布式) 一.Git 初始版本控制工具 1. 安装Git Ubuntu系统下,打开shell界面,输入: sudo apt-get install git-core  之后回车输入密码,即可完 ...

  6. C++内存管理学习笔记(5)

    /****************************************************************/ /*            学习是合作和分享式的! /* Auth ...

  7. C++内存管理学习笔记(6)

    /****************************************************************/ /*            学习是合作和分享式的! /* Auth ...

  8. C++内存管理学习笔记(7)

    /****************************************************************/ /*            学习是合作和分享式的! /* Auth ...

  9. Docker Image管理学习笔记,ZT

    Docker Image管理学习笔记 http://blog.csdn.net/junjun16818/article/details/38423391

随机推荐

  1. 【转】机器学习教程 十四-利用tensorflow做手写数字识别

    模式识别领域应用机器学习的场景非常多,手写识别就是其中一种,最简单的数字识别是一个多类分类问题,我们借这个多类分类问题来介绍一下google最新开源的tensorflow框架,后面深度学习的内容都会基 ...

  2. RabbitMQ学习系列(三): C# 如何使用 RabbitMQ

    上一篇已经讲了Rabbitmq如何在Windows平台安装,还不了解如何安装的朋友,请看我前面几篇文章:RabbitMQ学习系列一:windows下安装RabbitMQ服务 , 今天就来聊聊 C# 实 ...

  3. Assetbundles

    Unity5.4 Assetbundles官方说明 http://iq007.blog.163.com/blog/static/265542019201681264813653?suggestedre ...

  4. centos 单独安装apachebench

    这两天在测试php性能优化方法. 为了做压力测试可观察效果,就选择了ApacheBench来作为压力测试工具.其实就是大家常说的ab. 但是这个工具是安装apache web server的时候自带的 ...

  5. juery学习总结(二)——juery操作页面元素

    所有的操作都可以分为增.删.改.查四种,juery选择器代表查看的功能,那么剩下的操作就是对页面元素增.删.改.页面元素有3部分构成:标签,属性和内容,juery对元素的操作可以从这3方面入手. 一. ...

  6. Oracle TO_DATE 日期格式

    Oracle trunc()函数的用法 --Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdat ...

  7. HDU 2087 字符串

    #include <stdio.h> #include <string.h> void main() { ) { ] = {'\0'}; ] = {'\0'}; ; scanf ...

  8. [Algorithm] 群体智能优化算法之粒子群优化算法

    同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...

  9. C# Async, Await and using statements

    Async, Await 是基于 .NEt 4.5架构的, 用于处理异步,防止死锁的方法的开始和结束, 提高程序的响应能力.比如: Application area           Support ...

  10. C和指针 第十六章 标准函数库

    字符串转换: long int strtol(char const *string, char **unused, int base); 将字符串转换为数值形式,遇到非法字符停止,如果stop不是NU ...