使用VSCode便捷实现Git进阶功能!(包含同一项目配置多个远程Git仓库解决方案) ╰( ´・ω・)つ──☆✿✿✿ 项目协同
文章目录介绍组件推荐Git进阶功能分支控制创建、切换分支合并分支其他分支相关操作撤回修改提交记录合并标记不同步文件标签管理同一项目多远程Git仓库解决方案说明介绍本博客主要面向一些已经使用过Git的用户,对一些基础操作默认(拉去、推送、冲突解决)默认用户已经掌握。如果你对Git一无所知可以先看一下我的Git入门博客,里面详细介绍了Git如何安装,创建仓库,拉去,推送,还有利用VSCode可视化对G
文章目录
介绍
本博客主要面向一些已经使用过Git的用户,对一些基础操作默认(拉去、推送、冲突解决)默认用户已经掌握。如果你对Git一无所知可以先看一下我的Git入门博客,里面详细介绍了Git如何安装,创建仓库,拉去,推送,还有利用VSCode可视化对Git的拉去推送等基础操作。
组件推荐
VSCode自带的Git虽然已经比较完善,但还有一些VSCode的组件让其如虎添翼。
-
Git Graph(Git同步路线图)
可以方便的查看每次我们Git谁在什么时间更新了那些信息等内容,还可以便捷的给每次更新添加一些标签等。
-
GitLens(Git增强)
这个Git插件扩展了很多Git功能,比如下方截图中,可以显示每行代码是谁在什么时候更新的,此项目的贡献者都有哪些人,贡献了那些代码,此项目绑定了那些远程Git仓库等等,具体用法可以自行详细探索。
Git进阶功能
我在介绍Git进阶用法时,会把Git配合VSCode可视化操作作为重点介绍,直接输入命令网上已经有很多详细的介绍了,我这里并不会作为重点。
分支控制
在开发一些小项目项目时,我们常常会把Git当做一个多人协同工具,方便我们同步代码和可以实现类似存档的功能,但作为分布式版本控制系统的核心功能,版本控制却很少会被用到,想要体验到更加完整的体验到Git,版本控制是必不可少的功能。而分支便是体现出版本控制的实际形式。
如果你使用过GitHub或者其他类似的开源平台,应该看到过一些开源的软件有不同的版本,他们可能是已稳定版、体验版(测试版)之类的进行分类,或者已PC版,安卓版分类,同一个软件的不同版本,在源码上是十分相似的,但总是有一些不同的地方。这时候我们就可以利用Git的分支管理对其进行方便快捷的版本控制,在不同的版本直接无缝快速切换等操作。
| Git分支常用原生命令 | 作用 |
|---|---|
git branch |
查看当前已经存在的所有分支。 |
git branch 分支名 |
创建新的分支。 |
git switch 分支名 |
切换分支。 |
git switch -b 分支名 |
创建并切换分支。 |
git merge 分支名 |
合并指定分支到当前分支。 |
git branch -d 分支名 |
删除分支 |
创建、切换分支
- 点击左下角的Git分支图标和当前使用的分支名(如果使用的Git版本比较老,默认名为master,新版Git中已经将其更换名称。)
- 其中
正在创建新分支是指从当前正在使用的版本分支(我则是master)中,创建一个新的分支出来使用,而从...创建分支是可以手动指定一个基于那个分支来创建新的分支。(大白话描述一下就是选第一个创建出来的分支是和我们当前代码一样的,但选第二个是你已经有多个分支的情况下,可以手动选择新创建的分支要和已存在那个分支的代码一样)
- 创建分支后,点击左下角即可快速切换分支。(为了方便查看不同分支区别,可以先修改部分代码提交后在切换分支查看是否在不同分支下代码不同。)

合并分支
在分支常用的两种常见场景中,可能会碰到想要将一个分支中的内容并入另一个分支中(比如将测试通过的测试分支,并入稳定分支),VSCode提供了快捷的可视化操作方式。
选择Git > 分支 > 合并分支 > 选择要合并的分支。
其他分支相关操作
-
重命名分支

-
删除分支
VSCode当前默认的Git并未提供删除分支操作选项,当前需要使用到GitLens(Git增强)才能在可视化界面中删除分支

-
建议如果是一个敏捷开发的项目,一般可以分为:
- 主分支(生产环境): 用于项目正式上线时使用,基本能保证这个分支没有任何的明显漏洞。
- 测试分支(开发环境): 用于项目测试使用的分支,修复可以将漏洞修复完毕或添加了一些实验性功能后的分支先合并到此进行一些测试。
- 漏洞修复分支。
- 实验性功能添加分支。
撤回修改
Git为我们提供了一个非常强大的后悔药,这个药可以更加我们的意愿,让我们回到任意一个备份的时间点。
这里要科普一个Git中的标识符HEAD,其Git本分支仓库之前的版本,其中HEAD^或HEAD~1代表上一个版本,HEAD^^或HEAD~2代表上两个版本…
| Git撤回修改常用原生命令 | 作用 |
|---|---|
git checkout -- 文件名 |
将指定文件撤回到上次提交的状态(丢弃工作区当前的修改) |
git reset HEAD 文件名 |
将当前缓存区中的文件指定文件重新放回工作区 |
git reset --soft HEAD^ |
只是将代码退回到上一个版本,并不会删除上次提交的记录(HEAD^可以根据我上述说的执行修改,或者换成版本的ID) |
git reset --hard HEAD^ |
不仅将代码退回到上一个版本,并且删除上次提交的记录 |
一般我们在撤回修改时分为四种情况:
- 文件还未保存进入缓存区,只是想撤回到上次提交后的状态
这种撤回非常方便,只需要找到需要撤回修改的文件即可。
- 将文件添加到缓存区后发现问题,撤回修改
撤回缓存区文件同样非常简单,点击暂存的修改中指定文件的减号-即可
- 将文件添加到版本库中发现问题撤销修改
如果是已经提交到版本库后才发现了问题,这时候我建议你可以先把本地代码修改成正确的形式,之后在使用我下方会介绍的提交记录合并抹除错误的提交记录即可。 - 在多次提交后发现问题,想要撤回到指定节点
如果只是撤回上一次提交到版本库中的版本,VSCode给我们提供的自带的方法就很好用。如下图,我们可以将最近一次提交到版本库的内容撤回到缓存区。
PS: 这里的撤回,是将本地仓库中的Git提交记录进行撤回,如果当前撤回的内容以及提交到服务器,会在服务器的Git版本控制中留下一些记录!
从上图可以看出,我们进行的撤回操作只会影响到本地Git,所以,我们进行撤回操作后,本地仓库中会将上传的提交记录删除,但这个删除并不会影响到线上仓库,我们将撤回后重新修改的代码C提交到本地仓库时和以往的操作是相同的,但如果我们提交到线上仓库,因为修改后版本B代码和撤回重新修改就会出现和之前我们提交过的B版本进行比对来查看是否具有冲突。(这里需要注意一下,如果你将代码撤回后,在撤销所有修改,让其回到代码A的状态,这时候是无法执行在可视化界面执行同步操作的,因为这时候你工作区的代码和本地仓库中一致,没有任何改变。)**如果重新修改的代码C和之前提交的B修改了同一处地方,我们在同步到线上服务器的时候就会触发冲突。**下图是我进行了两次撤回提交操作。在本地的库中是看不到撤回的记录的,但是线上是存在的。
上述这种撤回方式适用于撤回一到两次提交,不过就算是一到两次提交也可能产生很多冲突,逻辑也会变得比较复杂,并且因为当前Git的可视化并不是十分健全,总会在一些地方出现小BUG,所以如果想要撤回不止一个版本时,我推荐大家使用VSCode的Git Graph组件。在需要撤回的指定存档出选择创建分支(Create branch)
这种方法可以撤回多个版本,并且将大量出错的代码进行存档,如果确定存档没有用处后,可以使用上述删除分支的方式将不需要的分支直接删除!
提交记录合并
我们在做项目的时候,可能会因为粗心大意,提交的时候忘记修改一些小错误,比如写了一些不想让他人看到的注释呀,忘记将项目接口改变成生产环境等,这时候我们可能只需删除某一行,或者只是修改一个参数即可解决,如果每次这样的操作都进行Git提交,会让我们的记录看上十分凌乱,这时候我们就可以将这种提交合并到上一次的提交中。
合并提交主要用到的参数为git rebase -i, 可以用HEAD^或id来指定需要合并的记录。
比如下列项目git rebase -i HEAD~3和git rebase -i 4e4ab9eb都代表合并前三个。不过我遵循能用可视化简化的操作就不用命令行,研究出了如何使用可视化来完成合并操作的方式,具体如下。
这里同样需要使用VSCode的Git Graph组件实现不需要输入任何命令的合并。
为了方便展示合并前和合并后的区别,我先基于新的分支创建了合并记录测试,并在此分支中进行合并说明。
-
首先找到需要合并那些分支,然后点击
在此提交上重新设置当前分支的基础(Rebase current branch on this commit) -
此时会跳出一个选择框,其中一定要选上
在新终端中交互式重建基地(Launch Interactive Rebase in new Terminal),此选项默认为关,如果不选择此选项,后面我们需要输入一些命令才能进行后续操作!
-
重建基地最多可以看到五个选项分别是pick: 选定了此记录,但什么都不做(默认值)reword: 改写提交时填写的提交信息(提交说明信息)edit: 重新编辑提交的内容,这里重新编辑的就是我们工作区的内容了,而不是填写时候的提交信息(这个功能一般很少用)squash: 将本条提交信息融入父级,这是我们正需要的功能,使用此功能就能合并提交记录了。fixup: 此选项和squash类似,不同的是squash会将我们的融合记录保存起来,而fixup则不会保存融合的记录drop: 删除本次提交
标记不同步文件
在我们项目中,会出现一些中间代码,或者一些较大的不方便使用git进行同步的文件,这种文件我们通常需要放入.gitignore中进行标注。
如果你会写正则,那么.gitignore的语法应该很容易看懂,下面我做几个简单的示例:
完整文件名(包含后缀): 标记此指定的文件不进行同步。假如当前需要不同步测试.pyc文件夹(注意这是一个文件夹) =>测试.pyc/;但如果这是一个文件,我们就不需要输入斜杠测试.pyc;如果是这个文件夹中一个文件测试1,则需要输入测试.pyc/测试1*: 假如当前需要不同步所有以.log后缀的文件 =>*.log[]: 假如当前需要不同步.pyc、.pyo、.pyd这三个后缀的文件 =>.py[cod]
想要了解更多语法,可以去查看正则表达式的完整语法
模板
- 通用配置: 如果是多人协同项目,推荐使用下列配置,因为团队中使用的开发环境(
IDE)是多种多样的,大多数开发环境会为了加快自己的启动速度等相关问题,会生成一些优化文件,这些文件对其他设备算是毫无帮助,但却数量众多,所以尽可能将所有常用的开发环境都标记为不同步文件,如果你还知道一些其他的开发环境(IDE)会生成的文件,可以在下方评论区补充!
# 日志文件
*.log
# 常用IDE的配置相关文件
# VSCode
.vscode
# JetBrains产品(当前已知Pycharm和Idea都会生成此文件)
.idea
# Sublime Text
*.sublime-workspace
*.sublime-project
# macOS的目录文件
.DS_Store
- Python配置:
# Python的一些 字节编译、优化、DLL文件
__pycache__/
*.py[cod]
*$py.class
# pyenv(常用创建Python虚拟环境的工具)
.python-version
# 常用虚拟环境默认的名称
.venv/
venv/
ENV/
.env
.pythonProject/
pythonProject/
受限于我当前的技术栈,展示无法写出更多,欢迎大家在下方评论区补充。
删除已同步的文件
有时候可能会后知后觉的发现自己同步了一些无用文件,但这些文件本地的确有需要,只是想删除库中的文件,这时候我们就需要只删除版本库中的文件git rm --cached 文件名。
当前暂无发现如何使用可视化的方式删除此文件!所以这里我将使用命令作为展示,如果你发现可视化也可以实现此功能,欢迎在下方评论区或私信我交流!
我当前在新的分支中提交了一个不需要同步的文件,当前我们的目标就是删除此文件, 但并不删除本地的实体文件。(实现这个功能需要使用--cached参数,我们直接使用git rm 文件名,会将本地文件一同删除,并且,删除后记得在.gitignore文件中将其标注为不同步文件,防止再次同步)

配置Git命令别名
Git还有一个非常好用的功能,他可以为那些繁杂的命令配置一些便于记忆的别名。比如我在删除已同步的文件中,因为没有找到可视化的解决方案,只能被迫使用命令行时,需要输入一串单词git rm --cached 文件名,我们可以给这个命令起一个别名,便于我们记忆。
主要方法有两种
- 在命令行中添加
git config --global alias.别名 '命令'比如git config --global alias.sc 'rm --cached',我们在从已同步的文件中删除指定的文件时,只需要输入git sc 文件名即可。注:这里的别名不支持中文。 - 首先我们需要在项目文件夹中找到
.git/这个隐藏文件夹中的config这个配置文件添加[alias]标签,并在其中添加别名即可。
上述是我在近一年来使用Git的一些总结!
配置多个远程Git仓库
一个项目要同时同步在多个Git仓库时(比如一个项目正在使用本地私服Git的同时,想开源在一个开源的Git平台。)有如下几种方法:
| 相关命令 | 作用 |
|---|---|
git remote -v |
查看当前已有的仓库 |
git remote add 仓库名 仓库地址 |
添加一个新的仓库 |
git remote set-url --add 仓库名 地址 |
在一个已有的一个仓库中添加一个新的提交地址 |
git remote rm 仓库名 |
删除仓库 |
-
方法一: 添加多个仓库,适用于多个仓库自己的代码并非需要完全一致,而是需要不同的版本的情况下。比如我当前已有一个git私服时,我想在把代码同步到
代码中国上进行开源。- 下面两种方法二选一即可。
- 在项目路径下输入:
git remote add 仓库名 仓库地址(比如:git remote add 新仓库 git@codechina.csdn.net:qq_39611230/test.git) - 在
.git/config(上述我已经介绍过这个文件在哪)这个配置文件中添加一个新的[remote '仓库名'],并且输入url和fetch信息
注: 如下图所示,将不同的分支配置可以配置到到不同的远程仓库中!如下在推送主分支时,会默认推送到origin仓库中,而推送新的分支时候就会自动推送到新仓库中。
-
方法二: 在一个仓库中添加多个提交地址,上述的方法中,我们不同的分支会提交到不同的仓库中,但我们的需求是想同时同步到所有仓库,就可以来用这种方法。
- 和上述相同还是有两种方法二选一即可。
- 在项目路径下输入:
git remote set-url --add 仓库名 地址(比如git remote set-url --add origin git@codechina.csdn.net:qq_39611230/test.git) - 在
.git/config这个配置文件中的已有的[remote '仓库名']中添加一个url属性即可。
注: 这种方法每次同步的时候都会同时同步到两个仓库中,但在VSCode中会触发一些并不影响使用的Bug(因为命名重复,VSCode的git扩展插件会把两个远程地址认证为两个远程仓库,但因为他们名称完全一样,会导致命名重复错误提示)
说明
对本博客有所帮助的博客
1. 一个项目push到多个远程Git仓库
2. 廖雪峰Git教程
更多推荐


所有评论(0)