您的位置:首页 > 其它

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

2013-12-04 18:52 162 查看
使用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目录下

文件.git/MERGE_HEAD记录所合并的提交ID
文件.git/MERGE_MSG记录合并失败的信息
文件.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<filename>访问 git show :1:README
编号为2的暂存区用于保存当前冲突文件在当前分支中修改的副本,可以用:2:<filename>访问 git show :2:README
编号为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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: