你必须掌握的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

相关推荐
程序员buddha1 小时前
git版本工具使用教程
git
tian-ming6 小时前
技术栈2:Git分布式版本控制工具
git
算你狠 - ZGX7 小时前
Git - 日志
git
CherishTaoTao7 小时前
Git别名设置
大数据·git
Python私教7 小时前
git配置用户信息
git
scoone9 小时前
Git 中的 patch 功能
git
scoone9 小时前
删除 git config 保存的密码
git
zhangphil12 小时前
git rebase --continue解冲突操作
git
luckilyil18 小时前
使用Git进行项目管理
git
焦糖酒20 小时前
Git通讲-第二章(4):分布式版本控制
分布式·git