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 show-ref 020e5bd6cd46bb4679d23bc9721e89f361f31e1f refs/heads/master 020e5bd6cd46bb4679d23bc972...
  • A0001AA
  • A0001AA
  • 2017年02月14日 13:17
  • 405

项目管理---git----快速使用git笔记(一)------git的简单介绍

最近svn代码管理服务器崩溃了,切换到git来运作。经过几天的使用,感觉很不错。尤其是代码合并到正式版本之前 可以对代码进行 code review。这样能很好的保证团队的代码质量和一些重复代码的出现...
  • q383965374
  • q383965374
  • 2016年12月08日 17:57
  • 1253

git 笔记记录(六) git检出

1.上一节讲了重置命令,重置命令是修改了引用的游标指向,重置命令所针对的是头指针HEAD,之所以没有修改HEAD内容,是因为HEAD指向了一个引用refs/heads/master,所以重置命令体现为...
  • bluceshang
  • bluceshang
  • 2013年11月22日 11:28
  • 3147

Git--远程仓库的使用和多仓库管理

远程仓库的使用 为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。 远程仓库是指托管在因特网或其他网络中的你的项目的版本库。 你可以有好几个远程仓库,通常有些仓库对你只读,...
  • MRL6140x
  • MRL6140x
  • 2017年09月25日 19:59
  • 276

导入另一个 Git库到现有的Git库并保留提交记录

提取出的主要步骤如下: 1 切换到要合并到的仓库 2 git remote add 仓库名 被合并仓库路径 3 git fetch --all 4 git merge 仓库名/被合并仓库想合并...
  • ly890700
  • ly890700
  • 2017年05月29日 23:37
  • 693

Git 教程(一) 基本的 git 版本控制——根据 git man page 阅读笔记整理

Git 教程(一) 教程分两部分,依据 git man page 页整理。 (一) 基本的 git 版本控制 (二) git 的基本构成及原理     本教程介绍如何使用Git导入项目,修改项...
  • xiaoxiaziliao
  • xiaoxiaziliao
  • 2015年10月28日 22:10
  • 196

git 学习1:针对个人文档管理和协同开发

http://blog.csdn.net/yinkaizhong/article/details/3437358 关于GIT ,作用就不怎么介绍,网上搜索有很多的 一:基本命令...
  • kaka320
  • kaka320
  • 2012年05月19日 23:42
  • 1151

Git服务器四种协议比较

协议 Git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议。下面分别介绍一下哪些情形应该使用(或避免使用)这些协议。 值得注意的是,除了 HTTP 协议...
  • liangpz521
  • liangpz521
  • 2014年03月19日 15:30
  • 902

git之rebase和merge学习记录

git之rebase和merge学习记录用git合代码遇到冲突,现在把解决过程中学习的记录下来.现在有两个分支:一个是用来发版的master,另一个分支work,是从master切出来的用作自己写代码...
  • zengyonglan
  • zengyonglan
  • 2016年09月09日 17:28
  • 725

git学习之三:分支管理

介绍git版本控制的核心利器-分支(branch)。
  • xuesuc
  • xuesuc
  • 2016年05月28日 15:00
  • 1133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:git 笔记记录(八) git 库管理与git协议
举报原因:
原因补充:

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