你必须掌握的git知识

本文主要介绍日常开发中常用的git相关知识,欢迎大家补充和指点

1.submodule - 子模块

有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。

现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。

初始化submodule

当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令(需要用gitbash执行命令):

git 复制代码
git submodule init
git submodule update
或:
git submodule update --init --recursive

还有一种更简单的方式

git 复制代码
git clone --recurse-submodules https://github.com/xxx

添加submodule

将一个已存在的 Git 仓库添加为正在工作的仓库的子模块:

  1. 新增git submodule add <url> <path>url为子模块的路径,path为该子模块存储的目录路径。
  2. 查看修改信息git diff --cached <path>查看修改内容可以看到新增的子模块,并且新文件下为子模块的提交hash摘要
  3. 设置或修改子模块分支git config -f .gitmodules submodule.src/test.branch 分支
  4. 提交 git commit -am "add submodule xxx" 提交一次,表示引入了某个子模块。提交后,在主项目仓库中,会显示出子模块文件夹,并带上其所在仓库的版本号
git 复制代码
git submodule add https://xxx.git src/test
git diff --cached src/test
git commit -am "新增测试子模块"

子模块仓库更新

查看子模块中是否有更新并拉取更新 只要进入到子模块相应目录查看和拉取就可

git 复制代码
git fetch
git submodule update --remote

2.切换分支暂存修改

日常工作中突然有一个紧急问题需要切换分支修复,你当前分支代码还没写完又不想提交,可以暂时缓存起来

  1. 新增暂存:直接存储 git stash 缓存默认信息;git stash save '你想说明的信息' 缓存你想说明的信息
  2. 查看暂存:git stash list
  3. 取出暂存:git stash pop 恢复最近一次缓存的信息;git stash apply stash@{0}取出指定缓存,其中将 stash@{n} 替换为您要恢复的 stash 编号(n 是 stash 的序号);
  4. 删除存:git stash drop stash@{0} 示例
git 复制代码
git stash
git stash save '缓存'

git stash list 
/* 缓存列表
stash@{0}: On master: 缓存
stash@{1}: WIP on fix-master-xxx
*/
git stash drop 1
git stash apply 0

3.删除或修改提交记录

当提交了一些错误或者无用代码/注释想要删除修改时,或想回退到某个版本可以用到以下方法

ps:

drop:删除这次提交

edit:使用本次提交,在rebase到这次提交时候,会暂停下来等待修正

pick:使用本次提交,不操作修改

强制推送,需要保证git仓库设置中Protected branches开启

删除中间的某条或多条记录

  1. 执行git log查看提交记录
  2. 复制前一次的commitId ,执行下面命令git rebase -i <commit-id> (也可git rebase -i HEAD~n查看最近n次的提交记录,选择哪条记录进行修改)
  3. 编辑(i)文件,将要删除的commit之前的单词(pick)改为drop;
  4. 保存(wq)文件退出大功告成
  5. 代码如果还在本地直接push就好了,如果已经提交到了gitlab需要git push origin HEAD -f 强制推送。

同理修改某条提交记录的注释说明

  1. 执行git log查看提交记录
  2. 复制前一次的commitId ,执行下面命令git rebase -i <commit-id>
  3. 编辑(i)文件,将要删除的commit之前的单词(pick)改为edit;
  4. 保存(wq)文件
  5. 按提示git commit --amend,编辑文档修改注释
  6. 修改多个注释则git rebase continue修改下一个注释,最后一个则成功rebased。
  7. 代码如果还在本地直接push就好了,如果已经提交到了gitlab需要git push origin HEAD -f 强制推送。

回退到某一个特定的版本

在做项目中可能提交了一个错误的提交记录,或者需要回退到某一版本可以用以下指令

  1. 执行git log查看提交记录或者git reflog查看分支的最近引用以及它们之间的更改
  2. 复制commitId ,执行下面命令git reset --hard <commitId>
  3. git push origin HEAD -f 强制推送,回退到之前选择的commitId那条记录

4.拉取分支并保存提交记录

有时我们需要拉A仓库分支的代码到B仓库中并且需要保存A分支之前的提交记录

  1. clone A分支到本地
  2. 基于A分支创建我们需要开发的B分支
  3. 删除原有A的远程关联(git remote rm <remote_name>),新建新B的远程关联(git remote add <remote_name> <remote_url>)。原来的远程关系不删也没关系,删除更干脆,避免手误影响到原有分支,产生不必要的麻烦。
  4. 将本地分支提交到远程分支git push -u <remote_name> <branch_name>
git 复制代码
git clone https://github.com/Abranch

git checkout -b bName

//查看已配置的远程仓库的 URL 和本地分支的映射关系
git remote -v 

//删除原有的远程关联
git remote rm origin

//新建新的远程关联 如
git remote add newOrigin https://github.com/Bbranch

//把本地分支提交到远程仓库
git push -u newOrigin bName

5.固定开发模板(vscode)

如果开发有固定提交模板规范,每次提交都拷贝这个消息,是不是也太麻烦了。我们可以通过设置git commit message模板的方式,每次提交只填写相关信息就好了。

1、 修改.gitconfig文件 (C:\Users\用户名)目录下,添加commit部分信息,指定commit 提交模板文件

ini 复制代码
[http]
       sslVerify = false
[user]
       name = your_name
       email = your_email
[core]
       autocrlf = false
[commit]
       template = C:/Users/xxx/.commit_template.txt

2、 创建commit提交的文件,比如我这里命名是.commit_template.txt (需要使用UTF-8编码格式),内容可以按照各位规范来我这里举个例子

复制代码
【描述】
【时长】h
【任务名称】
【评审人】

3、 重新启动VSCode,可以看到提交信息已经自动同步模板

结尾

如有错误或建议,不吝赐教!

推荐一个学习git的网站LearnGitBranching

相关推荐
Huazzi.7 分钟前
PowerShell 配置以及使用指南
windows·git·编辑器·shell·powershell·效率
随便写点哈1 小时前
git 版本控制系统
git
工具罗某人4 小时前
docker快速部署启动gitlab
git·docker·云原生·eureka
人工智能训练10 小时前
OpenEnler等Linux系统中安装git工具的方法
linux·运维·服务器·git·vscode·python·ubuntu
dblens 数据库管理和开发工具14 小时前
Git 指令大全(全干货版)
运维·git·ubuntu
张二娃同学17 小时前
深度学习入门篇——Github的使用和项目的导入
人工智能·git·深度学习·开源·github
SadSunset18 小时前
Git分支
git
Lewin.Lin20 小时前
git安装与gitee教程
git·gitee
C_心欲无痕1 天前
git - 版本回退的两种方式
git
QQ_4376643141 天前
阿里云简单配置gdb+git
git·阿里云