Git(7)-Git commit
Git提交
- 1.识别不同的提交
- 1.1绝对提交名-ID
- 1.2 引用和符号引用--HEAD
- 2.查看提交的历史记录-git log
- 3.提交图-gitk
- 4.提交的范围
- 4.1 X..Y
- 4.1 X...Y
- 5.查找bad 提交--git bisect
- 6.查看代码修改者-git blame
命令概览
git commit -a # 直接提交修改和删除文件有效
加了-a,在 commit 的时候,能帮你省一步 git add ,但也只是对修改和删除文件有效, 新文件还是要 git add,不然就是 untracked 状态。
1.识别不同的提交
在开发的过程中,能正确的区分不同的提交是十分必要的。例如,在新建分支时,必须要选择某个提交来作为分支点;当比较代码差异时,必须指明两个提交。在git中可以通过显示引用或者隐式引用来指代每一个提交。
当你要与同事讨论相同数据的提交时,最好使用两个版本中的相同提交名。
1.1绝对提交名-ID
40位的十六进制数字
git log -l --pretty=oneline 1fbb58
1.2 引用和符号引用–HEAD
引用(ref)指向Git对象库中的对象。一般用引用指向提交对象。分支名称,标签名都是引用。
.git 目录中有三种的命名空间表示不同的引用
chenyingying01@cyy hello % ls -hl .git/refs
total 0
drwxr-xr-x 2 chenyingying01 staff 64B 8 28 11:28 heads # 本地分支
drwxr-xr-x 3 chenyingying01 staff 96B 8 29 12:48 tags # 标签
drwxr-xr-x 3 chenyingying01 staff 96B 8 29 12:48 remotes # 远程跟踪分支
例如本地一个叫dev的分支是ref/heads/dev的缩写。
Git 自动维护几个用于特定目的的特殊符号引用:
- HEAD–始终指向当前分支的最近提交
- ORIG_HEAD–合并,复位操作会记录一下原来的HEAD,用于恢复或者回滚到之前的状态
- FETCH_HEAD–git fetch 命令将所有抓取分支的头记录到.git/FETCH_HEAD中,仅在刚刚抓去操作之后才有效。
- MERGE_HEAD–当一个合并操作正在进行时,其他分支的头暂时记录在MERGE_HEAD中。
符号引用–用一些特殊的符号集合来指代引用
^ 某一提交的上一个提交
~2 某提交的上两个提交
当一个提交具有多个父提交时,^表示不同的父提交
2.查看提交的历史记录-git log
git log HEAD # 输出每个可从HEAD找到历史提交日志消息
git log commit # 输出从该提交开始回溯的历史提交日志消息
git log commit1 commmit2 # 显示commmit1-commit2之间提交
git log -n -p commitID # -n限制回溯的条数,-p显示该文件修改的地方(打的布丁或者变更)
git log 提供的的可选择参数
git log --pretty=short # 限制显示信息的数量, oneline, short, full
git log --abbrev-commit # 显示散列值的缩写
git log -Sstring # 根据给定的string,沿着文件的差异历史搜索。(找出与string相关的历史变化?太强大了。)
3.提交图-gitk
提交的时间戳是不可信的。
使用gitk 来查看提交图–需要配置一下gitk工具
4.提交的范围
4.1 X…Y
许多git命令 都允许 指定提交范围,例如 git log
git log X..Y # 列出Y提交所有可达的提交,排除掉其中可达X的提交。
git log ^X Y # 等价命令
难点:辨别X和Y的可达提交,或者从显示结果中推出提交之间的逻辑关系
用处:如果你某个分支来自另一个版本库,那么^可以用来定位那些在你版本库而不在别人版库里的提交。
4.1 X…Y
对称差-求 XY各自拥有的提交的并集。
5.查找bad 提交–git bisect
有一天早上,你突然发现版本库出问题了,但是前天明明还是好的。这就需要定位到那个罪魁祸首(bad)提交。
git bisect : 指定提交范围,在该范围内进行二分查找,直至你定位到导致版本库出问题的提交。
启动二分搜索后,Git使用一个分离(detached) HEAD 来管理版本库的当前检出版本,支持定位操作。定位完成后需要将分支切换为原来的分支。
**关键点:**每次以reset工作区为搜索范围的中点提交,确定该提交是的好坏属性(在另一个终端中确定提交的好坏)
在二分搜索的过程中,Git维护一个日志,来记录搜索的过程。(如果找不到自己的方向了)可以使用git bisect replay 命令使用日志文件作为输入。
git bisect strat # 启动二分搜索
git bisect bad # 指定坏提交,省略就是HEAD
git bisect good commitID/v2.6.27 # 指定好提交
# 输出中点版本,你确定改版本是好坏
git bisect good # HEAD应该是移动到了中点提交,省略了HEAD(个人猜想)假定这个中点是好的
git bisect bad # 假定这个中点是坏的的
....
git bisect reset # 完成搜索后,换回原来的分支
6.查看代码修改者-git blame
查看文件的每一行 最后是xxx(谁) 在哪次提交中 修改的。
git blame -L 35, init/xxx.c # -L 是个什么作用。
Git(7)-Git commit相关推荐
- 【Git】Git 版本管理 ( 补充提交版本 git commit --amend | 版本库提取文件 git checkout -- filename | 删除文件 git rm )
文章目录 一.补充提交版本 git commit --amend 二.版本库提取文件 git checkout -- filename 三.删除文件 git rm 一.补充提交版本 git commi ...
- 【Git】Git 基础命令 ( 添加暂存文件 git add | 提交文件至版本库 git commit | 查看版本库状态 git status | 查询文件修改 git diff )
文章目录 一.添加暂存文件 git add 二.提交文件至版本库 git commit 三.查看版本库状态 git status 四.查询文件修改 git diff 一.添加暂存文件 git add ...
- [Git] 还原Git上commit,但是没有push代码
直接在Idea上操作2步解决: 1. 找到: 2. 在To Commit里面填写:HEAD^,表示将commit的信息还原为上一次的,需要多次直接reset多次即可: 使用命令行:原理一样 以下内容转 ...
- Git笔记(一)——[commit, checkout]
其实一直觉得自己是会用Git的,毕竟咱也是用Github的人啊!可是三月份找工作时候的一次面试颠覆了我的看法: Q: 用过Git吗?平常怎么用的? A: 用过的,一般就是add,commit,push ...
- Git冲突:commit your changes or stash them before you can merge.
今天用git pull来更新代码,遇到了下面的问题: error: Your local changes to the following files would be overwritten by ...
- a commit git 参数是什么意思_深入理解Git - 一切皆commit
在对 git 有了基本理解和知道常规操作之后,如何对 git 的使用有进一步的理解? 一切皆 commit 或许是个不错的理解思路. 本文将从『一切皆 commit 』的角度,通过 git 中常见的名 ...
- git 命令commit_Git Commit命令解释
git 命令commit The git commit command will save all staged changes, along with a brief description fro ...
- Git 提交报错,账户和密码错误 和 git add/git commit 文件太大太多
问题1: Git 提交报错,账户和密码错误 重新使用git进行作业提交 问题2: 源码太大文件太多,失败 git add . git commit idea push操作 问题3:git push 报 ...
- Git add回退 commit回退
Git add回退 & commit回退 Git 有三种状态,你的文件可能 处于其中之一: 已提交(committed).已修改(modified) 和 已暂存(staged). • 已修改表 ...
最新文章
- IDC评述网:7月上旬国内域名解析服务商Top10
- DDD领域驱动设计基本理论知识总结
- Spring,为内部方法新起一个事务,此处应有坑。
- Android4.4 framework分析——ActivityManagerService的启动和对Activity的管理
- RTL8189疯涨还缺货怎么办,可以用ESP8089替代.
- MySQL高级 - 存储引擎 - 特性
- nginx系列之七:限流配置
- Android显存到内存拷贝耗时,memcpy速度太慢?掌握这个技术让内存拷贝效率成倍提升...
- SpringBoot 使用 log4j2
- 查看win激活状态的命令
- 2017-10-22—发光二极管
- Xcode7.1模拟器卡顿问题以及解决方案
- smarty 模板不能正常加载css,js的问题
- [WP8.1UI控件编程]Windows Phone动画方案的选择
- c语言课程设计--打飞碟源代码,c语言课程设计_打飞碟提高篇.doc
- 程序员请万分珍重你的第一份工作,否则后悔了概不负责
- 性能测试入门(一):性能测试中的各项指标告诉我们什么
- 帐篷混沌映射在优化算法中的应用
- python主函数调用格式_Python入门基础中怎么定义函数,函数调用,函数传递参数...
- Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法
热门文章
- c++ char*初始化_C开发实战-深入理解指针
- MySQL——基本配置
- debian 升级linux内核,Debian8升级内核到4.5
- 【转】.net框架读书笔记---CLR内存管理\垃圾收集(四)
- 【转】1.1【MySQL】基本SQL语句大全
- 第五节:框架前期准备篇之锁机制处理并发
- mysql profile 导出_MySQL数据的导出和导入工具:mysqldump_MySQL
- 【HDU - 5977】Garden of Eden(树分治)
- 【牛客 - 327G】处女座与复读机(可编辑距离问题,dp)
- 【CodeForces - 520B】Two Buttons (bfs或dp或时光倒流,trick)