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 自动维护几个用于特定目的的特殊符号引用:

  1. HEAD–始终指向当前分支的最近提交
  2. ORIG_HEAD–合并,复位操作会记录一下原来的HEAD,用于恢复或者回滚到之前的状态
  3. FETCH_HEAD–git fetch 命令将所有抓取分支的头记录到.git/FETCH_HEAD中,仅在刚刚抓去操作之后才有效。
  4. 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相关推荐

  1. 【Git】Git 版本管理 ( 补充提交版本 git commit --amend | 版本库提取文件 git checkout -- filename | 删除文件 git rm )

    文章目录 一.补充提交版本 git commit --amend 二.版本库提取文件 git checkout -- filename 三.删除文件 git rm 一.补充提交版本 git commi ...

  2. 【Git】Git 基础命令 ( 添加暂存文件 git add | 提交文件至版本库 git commit | 查看版本库状态 git status | 查询文件修改 git diff )

    文章目录 一.添加暂存文件 git add 二.提交文件至版本库 git commit 三.查看版本库状态 git status 四.查询文件修改 git diff 一.添加暂存文件 git add ...

  3. [Git] 还原Git上commit,但是没有push代码

    直接在Idea上操作2步解决: 1. 找到: 2. 在To Commit里面填写:HEAD^,表示将commit的信息还原为上一次的,需要多次直接reset多次即可: 使用命令行:原理一样 以下内容转 ...

  4. Git笔记(一)——[commit, checkout]

    其实一直觉得自己是会用Git的,毕竟咱也是用Github的人啊!可是三月份找工作时候的一次面试颠覆了我的看法: Q: 用过Git吗?平常怎么用的? A: 用过的,一般就是add,commit,push ...

  5. 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 ...

  6. a commit git 参数是什么意思_深入理解Git - 一切皆commit

    在对 git 有了基本理解和知道常规操作之后,如何对 git 的使用有进一步的理解? 一切皆 commit 或许是个不错的理解思路. 本文将从『一切皆 commit 』的角度,通过 git 中常见的名 ...

  7. git 命令commit_Git Commit命令解释

    git 命令commit The git commit command will save all staged changes, along with a brief description fro ...

  8. Git 提交报错,账户和密码错误 和 git add/git commit 文件太大太多

    问题1: Git 提交报错,账户和密码错误 重新使用git进行作业提交 问题2: 源码太大文件太多,失败 git add . git commit idea push操作 问题3:git push 报 ...

  9. Git add回退 commit回退

    Git add回退 & commit回退 Git 有三种状态,你的文件可能 处于其中之一: 已提交(committed).已修改(modified) 和 已暂存(staged). • 已修改表 ...

最新文章

  1. IDC评述网:7月上旬国内域名解析服务商Top10
  2. DDD领域驱动设计基本理论知识总结
  3. Spring,为内部方法新起一个事务,此处应有坑。
  4. Android4.4 framework分析——ActivityManagerService的启动和对Activity的管理
  5. RTL8189疯涨还缺货怎么办,可以用ESP8089替代.
  6. MySQL高级 - 存储引擎 - 特性
  7. nginx系列之七:限流配置
  8. Android显存到内存拷贝耗时,memcpy速度太慢?掌握这个技术让内存拷贝效率成倍提升...
  9. SpringBoot 使用 log4j2
  10. 查看win激活状态的命令
  11. 2017-10-22—发光二极管
  12. Xcode7.1模拟器卡顿问题以及解决方案
  13. smarty 模板不能正常加载css,js的问题
  14. [WP8.1UI控件编程]Windows Phone动画方案的选择
  15. c语言课程设计--打飞碟源代码,c语言课程设计_打飞碟提高篇.doc
  16. 程序员请万分珍重你的第一份工作,否则后悔了概不负责
  17. 性能测试入门(一):性能测试中的各项指标告诉我们什么
  18. 帐篷混沌映射在优化算法中的应用
  19. python主函数调用格式_Python入门基础中怎么定义函数,函数调用,函数传递参数...
  20. Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法

热门文章

  1. c++ char*初始化_C开发实战-深入理解指针
  2. MySQL——基本配置
  3. debian 升级linux内核,Debian8升级内核到4.5
  4. 【转】.net框架读书笔记---CLR内存管理\垃圾收集(四)
  5. 【转】1.1【MySQL】基本SQL语句大全
  6. 第五节:框架前期准备篇之锁机制处理并发
  7. mysql profile 导出_MySQL数据的导出和导入工具:mysqldump_MySQL
  8. 【HDU - 5977】Garden of Eden(树分治)
  9. 【牛客 - 327G】处女座与复读机(可编辑距离问题,dp)
  10. 【CodeForces - 520B】Two Buttons (bfs或dp或时光倒流,trick)