常用命令:
git status 查看状态 (git status -s 摘要)
git add . 添加文件到缓冲区(staging area)
git diff —cached或者git diff —staged 查看缓冲区的文件变化(此时git diff已经无信息了,文件都加到缓冲区
git commit -a -m “”
git push
工作使用
初始化项目并推送至远程
- 在本地初始化仓库…
- 【远程】创建仓库
- 执行 git remote rm origin
- 执行 git remote add origin 仓库地址
- 获取远程库与本地同步合并 (如果远程库不为空必须做这一步,否则后面的提交会失败。)
- 把当前分支 master 推送到远程:git push -u origin {branchName}
提交规范
commit message 包括三个字段:type(必需)、scope(可选)和subject(必需)。type
- feat:新功能(feature)
- fix:修补bug
- docs:文档(documentation)
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:增加测试
- chore:构建过程或辅助工具的变动
如果 type 为 feat 和 fix ,则该 commit 将肯定出现在 Change log 之中。其他情况(docs、chore、style、refactor、test)由你决定,要不要放入 Change log,建议是不要。
scope
scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视仓库不同而不同。
subject
subject是 commit 目的的简短描述,不超过50个字符。
- 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
- 第一个字母小写
- 结尾不加句号(.)
分支管理
单分支模式:master一个分支
master/develop分支模式
错误处理记录
一:撤回push的代码reset
$ git log
commit 8622aca4a579bbb65c7255ae797622b4c33187a7 (HEAD -> master, origin/master, origin/HEAD)
Author: xxxcxy yy_z3em@163.com
Date: Wed Apr 15 13:51:08 2020 +0800
commit bc07480025bca168e2136064d795f2bb56eab999
Author: xxxcxy yy_z3em@163.com
Date: Fri Apr 10 14:09:47 2020 +0800
红色的是刚刚push到远程的记录。现在需要回滚到黄色的版本:
$ git reset —soft bc07480025bca168e2136064d795f2bb56eab999
这时将本地的代码强制push到远程:
$ git push origin master —force
二:merge分支冲突,恢复本地操作git reflog
错误场景:修改完代码commit之后,执行git push之后提示需要先拉取,git pull 之后有冲突,但是由于种种原因冲突解决失败,这时候想回到pull之前的状态,执行如下两步即可:
git reflog : 找到自己需要回退的HEAD执行如下命令:
git reset —hard {id} // 用head或提交码都可以
reflog翻译:Reference logs(参考日志) https://git-scm.com/docs/git-reflog
git reflog命令:可以叫做显示可引用的历史版本记录。
- 使用git log命令只可以查看到HEAD指针及其之前的版本信息,如果版本发生过回退操作,则可能会出现,HEAD指针之后仍存在历史提交版本的情况,而这些提交版本信息通过git log命令是看不到的。
即:git log命令是显示当前的HEAD和它的祖先,递归是沿着当前指针的父亲,父亲的父亲,……,这样的原则。 - 我们可以通过使用git reflog命令,就可查看到所有历史版本信息。由于查看所有历史版本信息的目的,大多是为了进行版本回退或恢复操作所使用,从中找到所需的commit索引,所以该命令被命名为reflog,即:引用日志。
提示:reflog并不是Git仓库的一部分,它单独存储,它纯属是本地的。 (git reflog命令显示的内容,应该是存储在.git/logs/HEAD文件中,或者是.git/logs/refs目录中的文件。)
也就是说git reflog命令中保留了从clone仓库开始,用户所有在本地库中的操作。
2、git reflog命令显示内容
1.查看版本库中历史提交记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/amend_test (master)
$ git log —oneline
68d777d (HEAD -> master) 我是第3次提交,重新修改的message
8b3a071 第2次提交,新增内容:git commit —amend v2
d3e2d8c 第1次提交,新增readme.txt文件
2.查看可引用的历史提交记录
69a9841 HEAD@{0}: commit (amend): 我是第3次提交,重新修改的message
bd4fd48 HEAD@{1}: commit: 第3次提交,新增内容:git commit —amend v3
8b3a071 HEAD@{2}: commit: 第2次提交,新增内容:git commit —amend v2
d3e2d8c HEAD@{3}: commit (initial): 第1次提交,新增readme.txt文件
从上可以看到,执行git reflog 命令,比执行git log命令多显示了一条内容。
(是使用git commit —amend命令追加提交时,覆盖了一条提交记录)
说明:
- 最前面是历史提交commit-id的前7位,根据这7位可以将版本库恢复到对应节点状态。
- HEAD@{n}:表示HEAD更改历史记录,最新的更改在上面。
- HEAD@{2}:表示HEAD指针在两次移动之前的情况。
- master@{one.week.ago}:表示master分支在本地仓库一周之前的情况。
- 通过HEAD@{n}语法可以回退到指定的提交。
例如:git reset —hard HEAD@{3}。 - 与HEAD@{n}与HEADn功能类似,但是HEADn回退的是git log命令显示的历史提交记录,而HEAD@{n}回退的是git reflog命令显示的历史提交记录。
- 最后一个冒号后面的字串为,该提交的说明信息摘要
git reflog命令具体用法如下: - git reflog [show] [log-options] []:就是显示同可引用的历史版本,同git reflog。就在后边可以加日志的选项。
- git reflog expire [—expire=] [—expire-unreachable=] [—rewrite] [—updateref] [—stale-fix] [—dry-run | -n] [—verbose] [—all | …]:删除掉更老的reflog条目。
- git reflog delete [—rewrite] [—updateref] [—dry-run | -n] [—verbose] ref@{specifier}…:从reflog中删除一个条目。
- git reflog exists :检查一个ref是否有一个reflog条目。
4、引起ref变化的操作有
所有引起HEAD指针变动的操作,都会被记录在git reflog命令中。
我们可知,引起HEAD指针变化的操作有:
- git checkout branchName:切换分支 。
- git commit:提交。
- git reset commit:重置。
- git checkout commit:签出某一个提交。
- git merge:合并操作。
- git rebase:基变。
- git pull:相当于 fetch + merge 。
- git pull : Fast-forward:没有冲突,快速前进。
- git pull —rebase:相当于fetch + rebase。
- git clone:初始化ref 。
