git 笔记记录(八) git 库管理与git协议
2013-12-04 18:52
162 查看
使用git show-ref命令查看所包含的引用
"快进式推送",就是要推送的版本库的提交是建立在远程版本库相应檓的现有提交基础上的,即远程版本库相应分支的最新提交是本地版本库最新提交的祖先提交.
强制推送,参数-f. git push -f
git pull 命令包含了两个动作:获取远程版本库的最新提交,以及将获取到的远程版本库提交与本地提交进行合并.
非快进式推送滥用会造成项目的空难,所以要禁用非快进式推送,在receice.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命令查看.
编号为1的暂存区用于保存冲突文件修改之前的副本,即冲突双方共同的祖先版本,可以用1<filename>访问 git show :1:README
编号为2的暂存区用于保存当前冲突文件在当前分支中修改的副本,可以用:2:<filename>访问 git show :2:README
编号为3的暂存区用于保存当前冲突文件在合并版本(分支)中修改的副本,可以用:3:<filename>访问 git show :3:README
工作区的版本则可同时包含了成功合并及冲突的合并,其中冲突的合并用特殊的标记(<<<<<<<=======>>>>>>>)进行标识.
特殊标识<<<<<<<(七个小于号)和=======(七个等号)之间的内容是当前分支所更改的内容.特殊标识=======(七个等号)和>>>>>>>(七个大于号)之间的内容是所合并的版本更改的内容.
冲突解决的实质是通过编辑操作,将冲突标识符所标识的冲突内容替换为合适的内容,并去掉冲突标识符,编辑完毕后执行git add命令将文件添加到暂存区(标号0),然后再提交就完成了冲突解决.
冲突有2种方法解决:1.手动解决.2用图形解决git mergetool
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
相关文章推荐
- 最长回文子串(百度笔试题和hdu 3068)
- Druid、BoneCP、DBCP、C3P0等主流数据库对比
- bootstrap学习
- 1007: [HNOI2008]水平可见直线
- unix 网路编程(卷一)第一个程序编译过程unix网络编程 第一个例子 connect error: Connection refused
- voilate详解
- IrfanView 4.36 中文版发布了
- 韩老师讲SQL2005数据库开发 环境准备代码
- 移动webapp注意问题
- hive函数 -- acos
- Android利用LocalSocket实现Java端进程与C端进程之间的IPC
- 我会每天都来签到的哦
- 数据库——(如何修改数据库的名字)
- OpenCV学习笔记(9)利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面
- 移植一个cocos2d-x游戏
- 复习下修饰符
- [对话CTO]甲骨文熊光樑:全球研发模式开发出接地气产品
- 数组的全排列组合算法
- 黑马程序员---多线程
- Python‘ssl.match_hostname()’函数SSL证书验证安全绕过漏洞