当前位置:   article > 正文

(四)Git高阶技巧_git log根据hash搜索

git log根据hash搜索

目录

比较不同分支之间代码差异

查看不同版本之间的代码差异

将暂存区中的多个功能代码分成多次提交

分支开发到一半时切换到bugfix分支

对本地不规范的提交历史进行修改和调整

对本地刚做出的修改、暂存和提交进行撤回

远程和本地同时撤回分支合并操作

二分查找哪一次提交引入了线上bug

将新版本的功能放到上一个版本提前上线


比较不同分支之间代码差异

  • 用reset回退到某个版本的时候,可能会使用commit的完整的40位的hash值来指定某个commit。
  • 版本的回退和前进,git reset --hard commit标识符, 40位的SHA-1 hash值
  • 但是在实际工作中,我们一般是不会用git的40位的SHA-1 hash值,  用短值
  • 1、短SHA-1值
  • 不一定就是要用40位完整的SHA-1 hash值来选择一个commit,也可以只是提供hash值的前几位,至少要4位以上
  • 在git仓库中就这前几位可以唯一定位一个commit就可以
  • 比如我们如果提供hash值的前7位,git会自动唯一定位出来这个前7位对应的是哪个commit
  • 所以,我们一般用git log --abbrev-commit --oneline --graph的选项,然后自动就会显示每个commit的短hash值,默认就是7位的
  • 2、使用分支的指针指代commit

git最重要的原理

(1)三个区域(三棵树):工作区,暂存区,仓库

(2)commit树+分支指针:

  • 无论在哪个分支上做开发和提交,都是在这个项目公共的一个commit树上在添加不同的commit,形成一颗越来越长的树。
  • 分支只是指向某个commit的一个指针而已。
  • 每个commit就代表了那个时刻下,项目的一个完整的历史快照版本。

因为分支实际上就是一些指针,所以分支是指向commit的,也可以直接用分支名称来指代它目前指向的那个commit

比如使用命令:git show master,就可以查看master分支指向的那个commit

  • 3、git reflog

git log和git reflog的区别是什么

  • git log,是你当前的分支指向的commit之前的所有commit会显示出来,你的分支指向的那个commit之后的commit是不会显示的
  • git reflog,是会显示最近几个月,完整的一个commit历史的
  • 所以,在当前分支上,如果要回退到过去的某个历史版本的话,那么此时应该是用git log就可以,但是如果要回到未来的某个版本,是用git reflog
  • git会自动记录和追踪过去几个月内,你的HEAD指针和分支指针移动过的每个commit
  • 用git reflog命令就能查看完整的一份commit记录,而使用git log就只能查看当前分支指向的那个commit之前的commit记录
  • reflog是每个研发人员自己本地的电脑上的记录,跟git log显示出来的提交历史不同,不会同步到远程仓库上去的
  • 4、选择历史版本

git show HEAD^

git show HEAD~2

HEAD,指针,指向的是当前的那个分支,当前的那个分支又是指向某个commit

HEAD,就可以指代当前你所处的那个commit对应的版本

HEAD^,就是说,HEAD对应的commit的上一个commit,HEAD^^,上两个commit,HEAD^^^,上三个commit

HEAD~5,就是说HEAD之前的第5个commit

  • 5、commit与分支

实际工作场景中经常会用到的一个技巧,比较两个分支之间差了哪些commit还没有合并

  • 使用master..feature/001语法,就可以查看哪些commit是feature/001分支可以触达的,但是是master分支无法触达的,
  • 此时就可以看到feature/001分支做的那些改动哪些还没有合并到master分支里去

git log --abbrev-commit --oneline master..feature/001

  • 此外,还可以看一下,哪些本地master分支的commit需要被推送到远程仓库中去,这个的意思就是说,如果你在本地的master上做了不少的提交和修改,可以看一看有哪些代码是还没有推送到远程仓库里去的

git log --abbrev-commit origin/master..HEAD

  • 这个用法其实常见于不是master分支,就是如果你在本地开发一个feature分支,然后开发了几天,结果不小心忘了推送commit到远程仓库,某一天你想起来了,此时你就可以看一下,你忘了推送多少个commit到远程仓库的feature分支去
  • 还可以看一下,在两个feature分支中都有的commit,但是在master分支中还没有

git log --abbrev-commit feature/001 feature/002 --not master

  • 同时也可以看一下哪些commit是存在于两个分支中的某一个,但是不是两个分支都有的

git log --abbrev-commit feature/001...feature/002

查看不同版本之间的代码差异

  • 本地查看

git diff:工作区和暂存区

git diff --cached:暂存区和仓库

git diff HEAD:工作区和仓库

git diff feature/001 master:两个分支之间的差异

git diff HEAD HEAD^:最近两次提交之间的差异

  • gitlab上查看两个分支之间的差异

还有别的场景

(1)你现在在写一个feature分支,你想看一下feature分支和master分支之前的差异,git diff  master feature/001

(2)这个过程同样是相当于你自己在做cod

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/986708
推荐阅读
相关标签
  

闽ICP备14008679号