常用命令:
git status 查看状态 (git status -s 摘要)
git add . 添加文件到缓冲区(staging area)
git diff —cached或者git diff —staged 查看缓冲区的文件变化(此时git diff已经无信息了,文件都加到缓冲区
git commit -a -m “”
git push

暂存:git stash save/apply “1”

工作使用

初始化项目并推送至远程

  1. 在本地初始化仓库…
  2. 远程】创建仓库
  3. 执行 git remote rm origin
  4. 执行 git remote add origin 仓库地址
  5. 获取远程库与本地同步合并 (如果远程库不为空必须做这一步,否则后面的提交会失败。)
  6. 把当前分支 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命令追加提交时,覆盖了一条提交记录)
说明:

  1. 最前面是历史提交commit-id的前7位,根据这7位可以将版本库恢复到对应节点状态。
  2. HEAD@{n}:表示HEAD更改历史记录,最新的更改在上面。
  3. HEAD@{2}:表示HEAD指针在两次移动之前的情况。
  4. master@{one.week.ago}:表示master分支在本地仓库一周之前的情况。
  5. 通过HEAD@{n}语法可以回退到指定的提交。
    例如:git reset —hard HEAD@{3}。
  6. 与HEAD@{n}与HEADn功能类似,但是HEADn回退的是git log命令显示的历史提交记录,而HEAD@{n}回退的是git reflog命令显示的历史提交记录。
  7. 最后一个冒号后面的字串为,该提交的说明信息摘要
    git reflog命令具体用法如下:
  8. git reflog [show] [log-options] []:就是显示同可引用的历史版本,同git reflog。就在后边可以加日志的选项。
  9. git reflog expire [—expire=] [—expire-unreachable=] [—rewrite] [—updateref] [—stale-fix] [—dry-run | -n] [—verbose] [—all | …]:删除掉更老的reflog条目。
  10. git reflog delete [—rewrite] [—updateref] [—dry-run | -n] [—verbose] ref@{specifier}…:从reflog中删除一个条目。
  11. 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 。