git 笔记记录(八) git 库管理与git协议

原创 2013年12月04日 18:52:03

使用git show-ref命令查看所包含的引用

bluceshang@bluceshang:~/gittemp$ git show-ref
38074841cf56acdfef2f638ea686f1fd49f17d51 refs/heads/branch_1.0
a974d7c2df090893f474f7784637b1f84eeeac15 refs/heads/master
a974d7c2df090893f474f7784637b1f84eeeac15 refs/remotes/origin/master
e7564d5348cd1b482fcefa01b1d0716adad29458 refs/tags/hello_1.0
f65ebb922cabc0def4b3d5c8432472f40ac3b3aa refs/tags/old_practice
注:以refs/remotes/开头的是远程版本分支在本地的映射refs/heads/开头的是分支refs/tags/形头的是里程碑.

"快进式推送",就是要推送的版本库的提交是建立在远程版本库相应檓的现有提交基础上的,即远程版本库相应分支的最新提交是本地版本库最新提交的祖先提交.

强制推送,参数-f. git push -f

git pull 命令包含了两个动作:获取远程版本库的最新提交,以及将获取到的远程版本库提交与本地提交进行合并.

非快进式推送滥用会造成项目的空难,所以要禁用非快进式推送,在receice.denyNonFastForwards设置为true.

git config receive.denyNonFastForwards true

git pull = git fetch + git merge;

合并操作:在大多数情况下,合并操作只须提供一个<commit>作为参数,合并操作将<commit>对应的目录树和当前工作分支的目录树内容进行合并,合并后的提交以当前分支的提交作为第一个父提交,以<commit>为第二个父提交.合并操作还支持将多个<commit>代表的分支和当前的分支进行合并,过程类似.

默认情况下,合并后会自动提交,如果提供--no-commit选项,合并后的结果会放入暂存区,用户可以对合并的结果进行检查,更改,然后手动提交.

git自动合并:1.修改了不同的文件中内容,2.修改了同和个文件中不同地方的内容,3.一个用户重命名了文件,而另一个用户修改了文件中内容,在三种情况git默认合并都会解决.

git合并过得是通过.git目录下

  1. 文件.git/MERGE_HEAD记录所合并的提交ID
  2. 文件.git/MERGE_MSG记录合并失败的信息
  3. 文件.git/MERGE_MODE标识合并状态.
版本库暂存区中会记录冲突文件的多个不同版本,可以使用git ls-files命令查看.
bluceshang@bluceshang:~/gittemp$ git ls-files -s
100644 10236e 1	README
100644 10236e 2	README
100644 10236e 3	README
每一行分为四个字段,前2个分别是文件的属性和SHA1,第三个字段是暂存区编号,当合并冲突发生后,全用到0以上的暂存区编号.
  1. 编号为1的暂存区用于保存冲突文件修改之前的副本,即冲突双方共同的祖先版本,可以用1<filename>访问  git show :1:README
  2. 编号为2的暂存区用于保存当前冲突文件在当前分支中修改的副本,可以用:2:<filename>访问  git show :2:README
  3. 编号为3的暂存区用于保存当前冲突文件在合并版本(分支)中修改的副本,可以用:3:<filename>访问 git show :3:README
工作区的版本则可同时包含了成功合并及冲突的合并,其中冲突的合并用特殊的标记(<<<<<<<=======>>>>>>>)进行标识.
$cat README
User1 hacked
<<<<<<< HEAD
Hello,user2.
=======
Hello,user1.
>>>>>>> a12133212332123443212343221dewsw
User2 hacked.
User2 hacked again.
特殊标识<<<<<<<(七个小于号)和=======(七个等号)之间的内容是当前分支所更改的内容.特殊标识=======(七个等号)和>>>>>>>(七个大于号)之间的内容是所合并的版本更改的内容.
冲突解决的实质是通过编辑操作,将冲突标识符所标识的冲突内容替换为合适的内容,并去掉冲突标识符,编辑完毕后执行git add命令将文件添加到暂存区(标号0),然后再提交就完成了冲突解决.

冲突有2种方法解决:1.手动解决.2用图形解决git mergetool





Git学习笔记(四)——分支管理和远程操作

之前总结了下Git版本库的创建和基本操作,里面涉及最多的概念,其中理解HEAD和master对于我们后面的远程操作Git远程版本库很有帮助,Git 中很多对象(比如提交、文件内容、tree)等都是用4...

Git学习笔记三--管理修改、撤销修改、删除文件

http://www.cnblogs.com/lixiaolun/p/4360856.html 1.管理修改   什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个...
  • jeffasd
  • jeffasd
  • 2015年11月13日 15:35
  • 1179

Git学习笔记(五)---修改管理

git的设计思想并不是管理文件,而是管理修改,什么是修改呢?新增一行,删除一行,更改某些字符,删了一些又增加一些,甚至创建一个文件都是修改。下面有一个小实验来说明这个问题: 1.对read.txt增...

简单使用Git和Github来管理自己的代码和读书笔记

百度到这篇很好的文章,转载以备后用以及方便大家。 原文出处:http://my.oschina.net/bxxfighting/blog/378196#OSC_h1_1 ___________...

Git学习笔记(七)---分支管理

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了...

git的学习笔记(分支管理)

分支概念其实,分支其实就是一个平行宇宙,试想,如果你需要修改一个特别大的地方,一时半会完成不了,但是,你没有修改完的话,别人也不好修改你的文件,只能等到你修改完毕再进行他的修改,但是,这样的话,整个项...

Git 自学笔记 egit (分支管理 下)

在git的分支merge中,不可能没有代码的冲突问题,特别在跟别人分工合作时。那该怎么解决?1.新建一个conflict分支,在dev方法下添加一句 System.out.println(“Crea...

git版本管理笔记整理

题记:linux之父Linus 最大的发明便是创造了git-分布式版本管理工具 。 最近在搭建git服务器,于是梳理I了下git笔记。 ------- FYI ----------------...
  • kaka320
  • kaka320
  • 2012年05月19日 23:47
  • 435

【转】简单使用Git和Github来管理自己的代码和读书笔记

以前不知道使用代码管理工具,最后写的一些东西都没有了,由于硬盘坏了或者不小心格式化了之类的,后来使用了Git和Github来托管自己的代码和读书笔记方便了不少,到哪里只要有网就可以把自己的东西拷贝下来...

简单使用Git和Github来管理自己的代码和读书笔记

以前不知道使用代码管理工具,最后写的一些东西都没有了,由于硬盘坏了或者不小心格式化了之类的,后来使用了Git 和Github来托管自己的代码和读书笔记方便了不少,到哪里只要有网就可以把自己的东西拷贝下...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:git 笔记记录(八) git 库管理与git协议
举报原因:
原因补充:

(最多只允许输入30个字)