赞
踩
目录
- 用reset回退到某个版本的时候,可能会使用commit的完整的40位的hash值来指定某个commit。
- 版本的回退和前进,git reset --hard commit标识符, 40位的SHA-1 hash值
- 但是在实际工作中,我们一般是不会用git的40位的SHA-1 hash值, 用短值
- 不一定就是要用40位完整的SHA-1 hash值来选择一个commit,也可以只是提供hash值的前几位,至少要4位以上
- 在git仓库中就这前几位可以唯一定位一个commit就可以
- 比如我们如果提供hash值的前7位,git会自动唯一定位出来这个前7位对应的是哪个commit
- 所以,我们一般用git log --abbrev-commit --oneline --graph的选项,然后自动就会显示每个commit的短hash值,默认就是7位的
git最重要的原理
(1)三个区域(三棵树):工作区,暂存区,仓库
(2)commit树+分支指针:
- 无论在哪个分支上做开发和提交,都是在这个项目公共的一个commit树上在添加不同的commit,形成一颗越来越长的树。
- 分支只是指向某个commit的一个指针而已。
- 每个commit就代表了那个时刻下,项目的一个完整的历史快照版本。
因为分支实际上就是一些指针,所以分支是指向commit的,也可以直接用分支名称来指代它目前指向的那个commit
比如使用命令:git show master,就可以查看master分支指向的那个commit
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显示出来的提交历史不同,不会同步到远程仓库上去的
git show HEAD^
git show HEAD~2
HEAD,指针,指向的是当前的那个分支,当前的那个分支又是指向某个commit
HEAD,就可以指代当前你所处的那个commit对应的版本
HEAD^,就是说,HEAD对应的commit的上一个commit,HEAD^^,上两个commit,HEAD^^^,上三个commit
HEAD~5,就是说HEAD之前的第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^:最近两次提交之间的差异
还有别的场景
(1)你现在在写一个feature分支,你想看一下feature分支和master分支之前的差异,git diff master feature/001
(2)这个过程同样是相当于你自己在做cod
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。