1. fast-forward和non fast-forward分别代表什么概念?

2. 在git中文件index是个什么概念?

3. stage/index/cache三者有什么关系?

4. git hard/soft/mix是什么概念?

5. HEAD

6. HEAD~和HEAD^

1. fast-forward和non fast-forward分别代表什么概念

fast forward是指可以通过HEAD指针的简单移动就可以达到合并的效果,而后者则反之。比如master分支上新建了一个dev指针,并且在master和dev上都有提交,但是二者并不是涉及同一行,也即没有conflict,这样在master分支上合并dev或者dev分支上合并master都会提示为此次的merge为fast forward, 只是HEAD指针的简单前移。

non-fast forward则可以理解为A和B同时从server更新了同一份代码,而A更改某个文件后提交,随后B也更改了该文件,当执行git push的时候,则会提示non fast forward, 这个时候需要git pull更新,然后提交。

2. 在git中文件index是个什么概念?

索引文件index:http://www.360doc.com/content/12/0419/17/1016783_204960412.shtml

理解下来,git add会把“工作目录”中的改变写到“index file”中,而git commit会把“index file”中的改变写到“git 仓库”。commit -a会直接把“工作目录”的改动写到“index file”和“git 仓库”.

git diff其实就是workcopy本地的内容和index文件比较,而不是和提交的HEAD比较,所以当本地执行完git add后,再git diff会是空的。如果想和HEAD比较,需要git diff HEAD.

那这个index文件存在哪呢?.git/index中二进制文件就是。下图可以看三者的关系:  

3. stage/index/cache三者有什么关系?

git术语解释:http://blogread.cn/it/article/7581

可以理解为index是文件提交的暂存区名称,而暂存区的这些文件前缀都是"cache", 所以现在用cached来形容的命令,表示要操作的文件是存在于index中,而不是workcopy中。而staged和cached更像是同义词,也是git后面版本使用的名词。

4. git hard/soft/mix是什么概念?

首先,hard/soft/mix这三个名词只是用在git reset下;其次,reset的作用是重置HEAD指针到另外一个commit。比如git reset HEAD那什么事情也不会发生。

--soft, 只是将HEAD指针变更,而之前的original HEAD和current HEAD之间的变更内容都放在stage(index)中。

--hard, HEAD指针变更,同样重置index和workcopy,使得三者完全匹配,这是比较危险的,因为这会使得你丢掉work tree.

--mixed(default), 如果git reset不跟参数,那这个是默认,新的HEAD和index匹配,但是workcopy不会被修改,而是把original HEAD和current HEAD之间的变更保存到working copy中作为本地未提交、为stage的内容,用户可以重新修改,然后做commit。

5. HEAD

HEAD:当前分支的最近一次提交;

6. HEAD~和HEAD^

看上去挺复杂:http://mux.alimama.com/posts/799

[git]问题list的更多相关文章

  1. Git 子模块 - submodule

    有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...

  2. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  3. Git与Repo入门

    版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...

  4. Git Bash的一些命令和配置

    查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...

  5. 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net

    1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...

  6. 史上最详细git教程

    题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...

  7. [版本控制之道] Git 常用的命令总结(欢迎收藏备用)

    坚持每天学习,坚持每天复习,技术永远学不完,自己永远要前进 总结日常开发生产中常用的Git版本控制命令 ------------------------------main-------------- ...

  8. 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解

    工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...

  9. git 命令

    切换仓库地址: git remote set-url origin xxx.git切换分支:git checkout name撤销修改:git checkout -- file删除文件:git rm  ...

  10. git亲测命令

    一.Git新建本地分支与远程分支关联问题 git checkout -b branch_name origin/branch_name 或者 git branch --set-upstream bra ...

随机推荐

  1. 操作各个版本的excel的链接写法

    有很有意思的网站:https://connectionstrings.com/ace-oledb-12-0/  很详细得介绍了各种写法 这里主要提两个: string strCon = @" ...

  2. POJ 3041 -- 二分图匹配

    题意:有个N*N的网格,有一部分格子里有陨石,小明有很牛逼的武器,打一枪后一行或一列的陨石就没了,给出陨石分布,求最小打炮数. 分析:其实就是Konig定理.记最小打炮数为m,在网格里你最多可以找出M ...

  3. 【转】Unity3d + NGUI 的多分辨率适配

    原文地址:http://www.cnblogs.com/cqgreen/p/3348154.html   一.当下移动设备的主流分辨率(数据来自“腾讯分析移动设备屏幕分辨率分析报告”) 1.1 iOS ...

  4. 【转载】Android 自动化测试 Emmagee

    Emmagee 是一个性能测试小工具 用来监控指定被测应用在使用过程中占用机器的CPU, 内存,流量资源的性能小工具 Emmagee 介绍 Emmagee是网易杭州研究院QA团队开发的一个简单易上手的 ...

  5. fail to create java virtual machine..

    今天打开zend stdio 的时候 出现的错误  fail to create java virtual machine... 然后找度娘了,,都说改xxxxx, 我打开360  ,把内存清理了一遍 ...

  6. 写一些封装part1 (事件绑定移除,圆形矩形碰撞检测)

    var EventHandle = { addEvent:function(ele,type,handle){ if (ele.addEventListener) { ele.addEventList ...

  7. C#循环语句练习2

    1.羽毛球拍15元,球3元,水2元,有200元,每一种至少买一件,问有几种买法? 2.洗发水15元,牙刷5元,香皂2元,有150元,每一种至少买一件,问有几种买法? 3.用100元钱买100只鸡,公鸡 ...

  8. C++ 开篇

    C++ 程序员历练之路 1.C++ primer 2.C++程序设计语言 C++之父的作品 3.C++标准库 STL 4.TCP/IP协议详解  共3卷 5.Oracle数据库和MySQl数据库的学习 ...

  9. Java中的Object类介绍

    Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类. Object类中的所有方法适用于所有子类 Object中比较常见的方法: ...

  10. textarea光标处插入文字

    (function($) { $.fn.extend({ //myField 对象元素 myValue 插入值 insertAtCursor: function(myField,myValue) { ...