说明:本文不涉及很多命令的历史来源 或者 详细教程,只是为作者在实际工作中总结了几块比较实用的流
程 or 技巧。不过弄明白本文列出的几块,基本上满足日常工作是没问题的啦。
Git各阶段关系总览
拉取流程
-
绑定提交账户 【填写用户名和邮箱时 需要输入密码】
-
对应一次提交 【临时性设备建议设置】
git config user.name BinCain git config user.email BinCain@net.com
-
全局修改 【长期用的设备建议设置】
git config --global user.name BinCain git config --global user.email BinCain@net.com
-
差异配置 IncludeIf 【可配置多个环境 有多个账号或者需要同步到不同远程的可以自行查询】
-
-
从远程仓库第一次下拉项目
git clone 仓库地址 # 如果是指定某个分支 git clone -b 分支名 仓库地址
-
PULL作用
#从远程获取代码并合并到本地的版本 git pull = git fetch + git merge FETCH_HEAD
-
同步远程代码
# 标准格式 git pull <远程主机名> <远程分支名>:<本地分支名> # 示例 ## 将远程master分支拉下来并和本地的test_local分支合并 git pull origin master:test_local # 如果是远程分支和当前分支合并 【可省略 :<本地分支名>】 git pull origin 远程分支名 # 如果本地当前分支和远程分支已绑定 可简写如下 git pull
提交流程
-
提交修改文件到暂存区 【工作区-> 暂存区】
git add <文件> # 添加所有修改 git add .
-
提交修改文件到本地仓库 【暂存区-> 本地仓库】
git commit -m '类型:注释内容'
-
提交修改文件到本地仓库 【工作区->本地仓库】
# 此命令 = add + commit m git commit -am '类型:注释内容'
-
提交修改文件到远程仓库 【本地仓库-> 远程仓库】
# 第一次提交时 可以设定关联关系 git push -u origin master # 如果是提交到指定的远程 git push origin xxxx # 绑定当前本地分支和某个远程分支 git push --set-upstream origin xxx # 本地版本已经绑定远程版本时可用 git push # 如果是强制覆盖远程 添加上 -f
-
提交注释规范
# 提交模板暂没有特别统一可以强制的规范 # 以下为本人的提交模板: <type>(<scope>): <subject> <describe> # type (必须) 【可选范围如下】 # feat:新功能(feature) # fix:修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG # style:格式(不影响代码运行的变动) # refactor:重构(即不是新增功能,也不是修改bug的代码变动) # delete:删除(删除无用代码 删除无用文件等) # docs:文档(documentation) # test:增加测试 # revert:回滚到上一个版本 # merge:代码合并 # scope (可选) 【简单描述 如 DAO、Service、Controller 等】【此选项在本司不作要求】 # subject (必须) 【简洁描述此次提交做了什么】 # describe (可选) 【详细描述 觉得subject不能够准确表达的 可详细说明】【最好将需求号加上】 # 提交示例 【较全】 feat(Controller): 新增xxx接口添加限流注解 xxxxx原因,xxxxxxx详细说明 # 提交示例 【简洁】 feat: 新增xxx接口添加限流注解
分支操作
-
查看分支
-
查看本地分支
git branch
-
查看远程分支
git branch -r
-
查看所有分支
git branch -a
-
-
创建分支
-
创建本地分支
# 依然停留在当前分支 git branch <分支名> # 创建并跳转到新的分支上 git checkout -b <分支名> # or git switch -c <分支名>
-
创建远程分支
git remote add origin <git地址> # 1.创建空的远程分支 git checkout -b 分支名; git push --set-upstream origin 分支名; # 2.以已有的分支为源创建远程分支 git checkout -b 分支名 origin/已存在的远程分支名 git push --set-upstream origin 分支名;
-
-
删除分支
-
删除本地分支
git branch -d <分支名> # 如果删除不掉 使用-D强制删除 git branch -D <分支名>
-
删除远程分支
# 第一种删除方式 git push origin --delete <分支名> # 第二种删除方式 git branch -r -d origin/分支名 git push origin :分支名
-
-
切换分支
git checkout <分支名> # or git switch <分支名>
-
分支修改后切换去其他分支,不想将修改的东西带过去 【只有被跟踪的有效】 git stash详细的用法可参考
## 1.保存修改到工作区 git stash git stash save '注释' ## 2.切换到其他分支 【切换后也可以再切回来】 ## 查询有哪些暂存 git stash list ## 应用 git stash apply stash@{$num} ## 恢复之前缓存的工作目录 将缓存的stash删除 git stash pop
-
合并其他分支的修改
-
git merge
# 在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。” git merge <分支名>
-
git rebase
# 第二种合并分支的方法是 git rebase。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。 # Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。 git rebase <分支名>
-
git cherry-pick 【http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html】
# 功能接近rebase cherry-pick是可以选择具体的某次提交 git cherry-pick commitHash # 1. 可以获取多次提交内容 git cherry-pick a b c # 2. a到c之间的所有提交【不包括a】 git cherry-pick a..c # 3. a到c之间的所有提交【包括a】 git cherry-pick a^..c # 如果有冲突 修改冲突后执行 git cherry-pick --continue
-
合并提交【squash/rebase 合并】 合并提交参考文档
-
squash
# 比如生产出现bug 新建分支bug_master_20210501 并产生了多次提交 # 1. 在master分支可执行如下操作 git merge --squash bug_master_20210501 #注意:squash前面是两个短杠 git commit -m '修复了xxx' git push origin master #2. 删除bug 分支
-
rebase
- IDEA 界面操作 https://zhuanlan.zhihu.com/p/356583972
- 命令行操作 https://www.cnblogs.com/wangiqngpei557/p/5989292.html
git checkout dev git rebase -i master git checkout master git merge dev
-
-
-
分离HEAD
git checkout CommitHash # 为该分离头结点状态下commit创建分支 # 如果不想要保留修改:不创建git分支将会在一段时间丢弃该commit # 如果想要保留修改 : git branch new_branch_name CommitHash基础上修改后的CommitHash # 指定特定的分支到指定的提交版本 git branch -f <分支名> <commitHash>
合并时版本变化动图
-
没有冲突的 【目标分支有修改】
-
没有冲突的 【当前分支有修改】
-
产生冲突的
以上几张图片来源: https://baijiahao.baidu.com/s?id=1664197276209808372&wfr=spider&for=pc
Git各阶段代码撤销
-
工作区【文件修改单未add】
git restore <文件> # 用 【 git checkout <文件> 】 也可以实现工作区撤销,git操作提示用的是restore
-
暂存区 【add 单未commit】
git restore --staged <文件> # 会将修改撤销到工作区 如
-
本地仓库【commit 单未push】
# 直接回退到某个版本 修改的东西会丢失 git reset --hard commitId # 回退到某个版本 修改的东西和在缓存区中 git reset --soft commitId # 回退到某个版本 修改的东西会在工作区中 git reset --mixed commitId
-
远程仓库【已经push的】
## 1. 单独开发时可用 git reset --hard commitId git push -f ## 2. 多人开发时就要考虑别人的版本号问题,需要既达到回退修改,又要提升版本号 # 撤销最近一次提交 git revert HEAD # 撤销上上次的提交,注意:数字从0开始 git revert HEAD~1 # 回退指定的某次提交 【不是最近一次的话 一般会有冲突,去掉当前的代码 保留之前的即可】 git revert commitId
参考文章: https://www.cnblogs.com/linzewei27/p/14380911.html
使用常见问题
-
.gitignore后添加忽略文件 【可能有些文件已经提交了】
# 先删除缓存 git rm -rf --cached . # 再重新添加 git add . # 提交到仓库 git commit -m 'fix:提交日志' / git push
-
提交时报错没有绑定对应远程
No tracked branch configured for branch master. To make your branch track a remote branch call, for example, git branch --set-upstream-to origin/master master
# 解决方案 git branch --set-upstream master origin/master
-
绑定提交账户 【填写用户名和邮箱时 需要输入密码】
-
对应一次提交 【临时性设备建议设置】
git config user.name BinCain git config user.email BinCain@net.com
-
全局修改 【长期用的设备建议设置】
git config --global user.name BinCain git config --global user.email BinCain@net.com
-