本文主要介绍日常开发中常用的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 仓库添加为正在工作的仓库的子模块:
- 新增
git submodule add <url> <path>
url为子模块的路径,path为该子模块存储的目录路径。 - 查看修改信息
git diff --cached <path>
查看修改内容可以看到新增的子模块,并且新文件下为子模块的提交hash摘要 - 设置或修改子模块分支
git config -f .gitmodules submodule.src/test.branch 分支
- 提交
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.切换分支暂存修改
日常工作中突然有一个紧急问题需要切换分支修复,你当前分支代码还没写完又不想提交,可以暂时缓存起来
- 新增暂存:直接存储
git stash
缓存默认信息;git stash save '你想说明的信息'
缓存你想说明的信息 - 查看暂存:
git stash list
- 取出暂存:
git stash pop
恢复最近一次缓存的信息;git stash apply stash@{0}
取出指定缓存,其中将stash@{n}
替换为您要恢复的 stash 编号(n 是 stash 的序号); - 删除存:
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开启
删除中间的某条或多条记录
- 执行
git log
查看提交记录 - 复制前一次的commitId ,执行下面命令
git rebase -i <commit-id>
(也可git rebase -i HEAD~n
查看最近n次的提交记录,选择哪条记录进行修改) - 编辑(
i
)文件,将要删除的commit之前的单词(pick)改为drop; - 保存(
wq
)文件退出大功告成 - 代码如果还在本地直接push就好了,如果已经提交到了gitlab需要
git push origin HEAD -f
强制推送。
同理修改某条提交记录的注释说明
- 执行
git log
查看提交记录 - 复制前一次的commitId ,执行下面命令
git rebase -i <commit-id>
- 编辑(
i
)文件,将要删除的commit之前的单词(pick)改为edit; - 保存(
wq
)文件 - 按提示
git commit --amend
,编辑文档修改注释 - 修改多个注释则
git rebase continue
修改下一个注释,最后一个则成功rebased。 - 代码如果还在本地直接push就好了,如果已经提交到了gitlab需要
git push origin HEAD -f
强制推送。
回退到某一个特定的版本
在做项目中可能提交了一个错误的提交记录,或者需要回退到某一版本可以用以下指令
- 执行
git log
查看提交记录或者git reflog
查看分支的最近引用以及它们之间的更改 - 复制commitId ,执行下面命令
git reset --hard <commitId>
git push origin HEAD -f
强制推送,回退到之前选择的commitId那条记录
4.拉取分支并保存提交记录
有时我们需要拉A仓库分支的代码到B仓库中并且需要保存A分支之前的提交记录
- clone A分支到本地
- 基于A分支创建我们需要开发的B分支
- 删除原有A的远程关联(
git remote rm <remote_name>
),新建新B的远程关联(git remote add <remote_name> <remote_url>
)。原来的远程关系不删也没关系,删除更干脆,避免手误影响到原有分支,产生不必要的麻烦。 - 将本地分支提交到远程分支
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