一、常见问题

1.git commit 后 想撤销commit (回退版本 未push到远程仓库)
git add .
git commit -m 'fix: 工单问题修复'
git reset --soft HEAD^ // 撤回commit 代码仍然保留

HEAD : 上一个版本 提交了两个commit 撤回 HEAD^^

–mixed 不删除工作空间改动代码,撤销commit,并且撤销git add . 操作

–soft 不删除工作空间改动代码 撤销commit 不撤销git add . 操作

–hard 删除工作空间改动代码 撤销commit 撤销git add 相当于恢复到上一次commit状态

修改commit 注释: git commit -amend

2.git 版本回退操作 (已commit 并push到远程仓库)
git log
git reset --hard commit_id
git push -f // 强制推送 不推荐此方法
git log
git revert commit_id
// 修改commit 信息
git push

二、git 配置

git config -l 查看当前git环境详细配置
2.1、查看系统config

git config –system –list

配置文件在git安装目录/etc/gitconfig

2.2、查看当前用户配置

git config –global –list

配置文件在~/.gitconfig

2.3、查看当前仓库配置信息

git config –local –list

配置文件在当前项目的/.git/config

2.4、修改git配置

git config [–local][–global][–system] section.key value

git config –local user.name huhuhu 设置当前项目的用户名

git config –global core.quotepath false 配置当前用户的编码项,可以解决中文编码问题

git config –local core.ignorecase false 配置当前项目不忽略文件大小写,git默认忽略文件名的大小写,这点值得注意

三、常用指令

3.1 init && clone

git init 在当前目录新建初始化一个仓库

git init [project -name] 在一个目录下新建本地仓库 // git init my_project

git clone [url] // 克隆一个远程仓库 // git clone https://github.com/tanyangkang/vue_initProject.git

3.2 diff

git diff HEAD – . 查看最新本地版本库和工作区所有文件的区别

git diff HEAD – [file-name] 查看最新本地版本库和工作区文件的却别

git diff HEAD^ – [file-name] 查看本地上一个版本和工作区文件的却别

git diff [local branch] origin/[remote branch] 比较本地分支和远程分支的区别

3.3 status

git status [file-name] 查看指定文件状态

git status 查看所有文件状态

3.4 add

git add [file-name1]…..[file-name n] 从工作区添加指定文件到暂存区

git add . 将工作区的被修改的文件和新增的文件提交到暂存区,不包括被删除的文件

git add -u . u指update,将工作区的被修改的文件和被删除的文件提交到暂存区,不包括新增的文件

git add -A . 将工作区被修改、被删除、新增的文件都提交到暂存区

3.5 commit

git commit -m [massage] 将暂存区所有文件添加到本地仓库 // git commit -m ‘fix: xxxx’

git commit [file-name-1] [file-name-2] -m [massage] 将暂存区指定文件添加到本地仓库

git commit -am [massage] 将工作区的内容直接加入本地仓库

git commit –amend 快速将当前文件修改合并到最新的commit,不会产生新的commit。在提交commit后发现还有部分文件修改忘记提交了可以是用该命令

加-m是指直接在后面写上版本的注释,不加-m的话会用一个vim打开文件让你写入massage,有未追踪的文件将会失败,需要add加入暂存区。

提示信息

  • feat: 新特性,添加功能
  • fix: 修改 bug
  • refactor: 代码重构
  • docs: 文档修改
  • style: 代码格式修改, 注意不是 css 修改
  • test: 测试用例修改
  • chore: 其他修改, 比如构建流程, 依赖管理
3.6 clean

git clean -df 加-d是指包含目录,加-f是指强制,删除所有未跟踪的文件

3.7 log 缩写 lg

git log 显示所有commit日志

git log –pretty=oneline 将日志缩写为单行显示

git log –graph –pretty=oneline –abbrev-commit 查看分支合并情况

git log –oneline –decorate –graph –all 查看分叉历史,包括:提交历史、各个分支的指向以及项目的分支分叉情况。

git log -3 查看最新3条commit日志数据

3.8 reflog

git reflog 显示操作本地版本库的命令,包括commit和reset等,在回退版本以后又后悔找不到commit id了可以使用此命令查看历史

3.9 push

git push 将文件添加到远程仓库

git push -f 强制提交,当我们本地reset到旧的版本时,然后普通push会被拦截,因为此是本地HEAD指向比远程库还要旧

git push origin [branch-name] 推送当前本地分支到指定远程分支

3.10 rm

git rm --cached [file name] 删除暂存区的文件

git rm -rf . 删除暂存区、工作区所有文件 (==慎用!==)

3.11 checkout 切换分支和文件

git checkout --[file name] 切换文件

git checkout [branch]切换分支

git checkout -b [new-branch-name] 创建并切换分支

3.12 reset 回退

对当前整个版本进行操作

git reset --{soft|(mixed)|hard} HEAD

--soft 其中可选参数soft表示单纯的切换HEAD指向的commit-id

–mixed 默认值mixed参数表示先执行上面一步,然后再将commit-id里面的内容更新到暂存区

–hard hard表示先执行上面两步,然后再将暂存区内容同步到工作区

git reset --hard HEAD^^ 用上两个版本里的所有文件撤回到暂工作区

git reset --hard [commit id] 用指定版本的所有文件撤回到工作区(回退到指定commit)不可逆

git push -f 强制推送

当对当个文件进行操作

git reset HEAD [file-name]

对单个文件操作时候只能用mixed参数,而且还是可省略
对单个文件操作时候HEAD指向不会变
将commit中指定的文件同步到暂存区中
git reset [commit-id] [file-name] 将指定commit-id中的文件替换掉暂存区的文件

3.13 revert

git revert -n [commit-id]

git revert -n HEAD^^

3.14 branch 分支管理

git branch [branch-name] 创建分支

git branch 查看当前分支

git branch -a 查看本地和远程的所有分支

git branch -r 查看远程所有分支

git branch -m -<name> 重命名当前分支名

git branch -d [branch-name] 删除一个分支

git branch -D [branch-name] 强制删除一个没有合并的分支

git push origin -d 删除远程分支

git branch --set-upstream-to=origin/[branch-name] [branch-name] 把本地分支和远程分支进行连接

3.15 merge 合并操作

git merge 合并本地origin/[branch-name]和HEAD->[branch-name]的代码,并同步到工作空间

git merge [branch-name] 用于合并指定分支到当前分支

git merge --quit 退出当前分支合并,当合并后冲突很多,要撤回合并分支就可以用这个命令

git merge --no-ff -m [massage] [branch-name] 不使用Fast forward合并分支,这样会创建新的commit,所以需要massage。这样被合并的分支HEAD指向是会变的。

·如果使用了Fast forward方式合并分支,那么删除次要分支的时候历史分支记录也会被删除,这样就无法追寻分支合拼信息了。

3.16 switch

git switch -c [branch name]创建新分支并切换到该分支

git switch [branch name] 切换到已有分支

3.17 stash

git stash 隐藏当前工作的修改

如果不隐藏自己修改的半成品代码,就会发生切换到别的分支后,将然后自己的半成品代码带入其他分支,这样就发生很多不必要的麻烦。
git stash save message 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。

git stash list 查看隐藏的工作信息列表

git stash drop 删除隐藏的工作信息

git stash pop 恢复隐藏的工作信息,同时删除隐藏的工作信息

git stash apply [stash@{0}] 恢复指定的隐藏工作信息,但是不会删除隐藏的工作信息

3.18 cherry-pick

git cherry-pick [commit-id] 这个是复制一次commit提交,然后在当前分支上重新提交一遍;也就是将指定commit的合并到当前分支;

3.19 remote 关联远程仓库

git remote add origin 远程地址 关联远程仓库

git remote 查看本地添加了哪些远程分支地址

git remote -v 查看本地添加了哪些远程分支地址更详细信息

git remote remove origin 删除本地指定的远程地址

3.20 fetch

git fetch 拉取远程分支最新的commit 到本地仓库的origin/[branch name]

3.21 pull

git pull 从远程仓库拉取代码到工作空间

pull 和 fetch的关系
  • git pull == git fetch + git merge
  • git pull --rebase = git fetch + git rebase
3.22 tag

git tag 查看所有标签

git tag [version] 给当前最新的commit打上标签

git tag [version] [commit-id] 给指定的commit-id打上标签

git tag -a [version] -m [massage] [commit-id] 给指定的commit-id打上标签并附上说明文字

git tag -d [version] 删除标签

3.23 show

git show [tag-name] 查看标签的详细信息

3.24 rebase

git rebase -i HEAD~2 合并前两个历史提交,会弹出vim修改信息,修改第二行的pick为s,或者为squash,squash为合并的意识,然后保存退出编辑,会打开第二个vim编辑,合并并修改commit内容,保存退出会产生一个新的commit id,这样就合并了两个commit

git rebase -i HEAD~2 合并前两个历史提交,会弹出vim修改信息,修改第二行的pick为s,或者为squash,squash为合并的意识,然后保存退出编辑,会打开第二个vim编辑,合并并修改commit内容,保存退出会产生一个新的commit id,这样就合并了两个commit

git rebase –skip 它表示丢弃当前补丁的重放,即忽略掉当前补丁

git rebase –abort 它表示终止正在进行的变基操作,并且恢复到最初始的状态

git rebase –continue 它表示继续补丁的重放,一般在解决冲突后执行该命令

3.25 删除关联的远程仓库
git remote rm origin
3.25.1 删除远程分支
git push origin --delete <branch_name>
3.26 根据commitId拉取新分支

git co -b 2.5.9-hotfix ea0ac964 // co为checkout的缩写设置 git config –global alias.co checkout

3.27 git合并某个特定的提交commit到指定的分支上
git log  //查看提交的日志,复制要合并的那个分支的commit id(简略ID-前8位数)

git checkout 要合并的分支 // 切换到要合并的分支上

git cherry-pick 上面复制的那个要合并的commit id // 提交该commit到当前分支

git push // 推送到B分支远程仓库
3.28 删除git缓存,用于ignore文件新增忽略文件
git rm --cached -r .
git add .
git commit -m "fix:可以写一下工程的描述"
git push -u origin branch 分支名
3.29 git删除版本库-重新初始化-提交
#进入到该项目Terminal窗口,执行删除.git目录
rm -rf .git

#此时项目已经不再被git版本库所管理,就可以创建忽略文件了;
创建.gitignore文件

#然后重新初始化该项目,该项目又受git版本控制了;
git init

#然后进行add了,将所有的项目都提交到缓存
git add .

#然后提交到git本地仓库中
git commit -m "提交初始化版本"

#在gitee网站中创建一个仓库,进行与远程仓库关联
git remote add origin git@****/*.git 仓库地址

#然后推送到远程仓库
git push origin master

#在重新执行下推送
git push -u origin master
3.30 从某一个commit新建分支进行开发。
git log // 查看历史commit消息
git checkout [commitId] -b [new-branch-name] //根据某个commit 创建新的分支
git push origin [new-branch-name] //推送到新分支
3.31将当前修改的内容提交到新的分支上
git stash save 'xxx'
git checkout -b <branchName>
git stash pop
git add .
git commit -m 'xxxx'
git push origin <branchName>
3.32 git命令别名设置
git config --global alias.co checkout
git config --global alias.lg log
//删除别名
git config --global --unset alias.lgq
3.33 git提交规范
  • feat: 新增功能
  • fix: 修复bug
  • docs: 仅文档修改
  • style: 不影响代码含义的更改
  • refactor: 既不修复bug也不添加特性的代码更改
  • perf: 改进性能的代码更改
  • test: 添加缺少的测试或更正现有测试
  • chore: 对构建过程或辅助工具和库(如文档)的更改
  • delete:删除功能或文件
  • modify:修改功能
  • build:改变构建流程,新增依赖库、工具等(例如webpack、gulp、npm修改)
  • revert:回滚到上一个版本
  • ci:自动化流程配置修改