前言
Visual Studio中深度集成了git功能,可以很方便地进行源代码版本控制功能。
大部分日常的操作我们可以通过界面来完成,这样就省去了输入git命令的时间,也可以不用记很多参数。
但这毕竟是辅助工具,掌握常用的git命令行还是很有必要的。
言归正传,接下来开始介绍Visual Studio 中集成的git功能。
本文以Visual Studio 2022为例进行演示
安装
Visual Studio的UI中已经集成了git相关功能,但是也需要安装git后才能使用。
如果没有安装git,在使用相关功能时,可能会看到如下的提示
安装方式可以通过以下两种
1、在Visual Studio的安装程序中,勾选<适用于Windows的Git>
推荐使用这种方式,因为免去了单独下载和安装的环节
2、访问git官方网站,下载安装包手动安装
下载地址:Git - Install for Windows
导入/克隆(clone)代码
方法1、在Visual Studio的启动界面上选择克隆存储库
输入项目地址
方法2、通过git命令行/git gui
输入
1 git clone https://github.com/zhaotianff/ImageViewer.git
分支(branch)功能
Git中的分支(branch)是一个轻量级的、可移动的指针,指向我们所做的提交。
默认分支的名称是master(github现已更新为main)。
每当做出任何commit时,它都会自动前进。
在Git中,可以创建任意子分支,从主存储库创建另一条开发线,开发新功能或修复错误。
一旦功能或错误修复完成,可以将它合并回主分支,然后删除子分支(也可以保留)。
如下图所示:
创建分支
Git分支只是一个小引用,用于保存准确的提交历史记录;
创建分支时不会创建源代码的多个副本。
在工具栏上点击当前分支,在弹出的面板中,选择创建分支。
在弹出的窗口中输入新分支的名称,并选择基于的分支,再点击创建,即可创建分支
对应的git命令行
# 方法1:使用 checkout(兼容所有 Git 版本)git checkout -b 新分支名称 基础分支名称# 方法2:使用 switch(Git 2.23+ 推荐,更直观)git switch -c 新分支名称 基础分支名称
推送本地分支
创建本地分支后,需要将分支推送到服务器后,才能在服务器上看到新创建的分支。
选择Gti->管理分支菜单
找到对应的分支,在右键菜单中选择推送
推送成功后,可以看到提示信息
此时我们打开git服务器上的页面,可以看到刚推送的分支
对应的git命令
1 git push origin 分支名称
切换分支
在工具栏上选择当前分支,在弹出的面板中选择要切换的分支。
本地分支是指存在本地电脑上的分支。
远程是指存储在git服务器上的分支。
对应的git命令
1 git checkout 分支名称
删除分支
删除本地分支
当我们只想删除本地分支,而不删除远程服务器上的分支时。
可以通过右键菜单里的删除菜单进行删除
对应 的git命令
1 git branch -d 分支名称
通过这种情况删除的分支,还可以通过下面的方式恢复回来。
在remotes/origin文件夹下,选择服务器上本地已经删除的分支,右键选择签出,即可恢复分支。
对应的git命令行
1 git checkout -b 删除的分支 origin/删除的分支
删除服务器上的分支
当我们想彻底删除分支时,可以通过在remotes/origin文件夹下面的分支上打开右键菜单,选择删除菜单。即可永久删除分支
注意,此操作不可逆,在删除前会有确认对话框
对应的git命令
1 git push origin --delete 远程分支名称
更改、暂存和提交功能
文件状态
当我们从git服务器clone一个项目时,所有的文件都是处于未修改的状态(Unmodified)。
当我们对文件进行了修改,修改的文件就变成了修改状态(Modified),可以在右下角看到修改的文件数量
单击修改数量图标,可以看到已经修改的文件
如果我们要把文件提交到git服务器上,就需要先进行暂存(Staging)。
我们看一下这几种状态的含义
未跟踪(Untracked):指的是工作区中存在,但未被 Git 纳入版本控制的文件。正常使用场景下,我们可以不考虑这种状态。
未修改(Unmodified):当我们从服务器导入代码,或进行提交后的文件状态
已修改:对文件进行了编辑,就变成了已修改状态
暂存 (Staging):把文件放到暂存列表中,用于下次提交(Commit)。
例如我修改了3个文件,但是下次提交时,只想提交两个文件。就可以对这两个文件进行暂存
对应的git命令
1git add App.xaml2 git add MainWindow.xaml
如果我们想把文件从暂存列表中移出,在文件上单击右键,在打开的菜单里选择取消暂存即可。
对应的git命令
1 git restore --staged 文件名
提交更改
当把文件放到暂存列表后,就可以对文件进行提交(Commit)。
在提交前,我们需要编辑此次提交的日志
对应的git命令
1 git commit -m "提交日志xxxxx"
当进行提交后,本地的git仓库已经有了这条提交记录,但是还未同步到服务器。
可以在状态栏上看到具体的数量
此时我们单击传出数量,在弹出的菜单中,选择推送,即可将本地的提交记录推送到服务器。
也可以在提交时直接推送,我一般习惯了使用这种方式进行操作。可以一键完成提交并推送
撤消更改
当我们对一个代码文件进行修改后,可以在修改列表中双击这个文件,与未修改的文件进行对比
如果我们需要撤销某一行的修改,可以在对比页面的修改行上点撤消行按钮
如果需要撤销整个文件的修改,在文件右键菜单中选择撤销更改即可
对应的git命令行
1 git restore <file-name>
修改提交日志信息
当提交未推送到服务器上时,可以修改提交日志信息。
在工具栏点击传入/传出按钮,然后选择查看所有提交
双击本地提交
然后在右侧的面板中编辑提交日志消息即可
提取、推送、拉取和同步功能
当我们点击这个查看传入/传出按钮时,可以在这里看到提取、拉取、推送和同步这几个菜单项。下面依次介绍一下这些功能的区别。
推送(Push)
推送功能在前面我们已经使用过了,它的作用是把本地的修改同步到服务器,包括修改文件、创建分支等操作。
在前面我们还介绍过分支功能,
如果我们创建了一个空的分支,可以在分支的菜单里直接将这个分支推送到远程存储库。
如果我们在本地创建了分支,并在这个分支里修改了文件,那么在推送时,它会通过首先创建与本地存储库同名的分支,然后向其推送本地提交,将更改发布到远程存储库。
如果在推送操作期间,Visual Studio发现远程提交和本地提交之间存在任何冲突,它将立即中断操作。
必须先解决这些冲突,然后才能推送。在后面我们会介绍如何解决冲突。
提取(Fetch)
当我们在服务器进行了修改,或者同仓库的其它协同者更新了仓库代码,而本地又并未同步这些修改。
我们可以通过提取(Fetch)功能,把这些修改导入到本地,但是不自动合并这些修改。
如果服务器上有修改,可以在这里看到修改列表
拉取(Pull)
拉取的功能和提取类似,但是它会自动合并修改。
如果在合并过程中,发现有冲突,系统会提示你。
必须在处理这些冲突之后,才能进行下次推送。
接下来我们演示一下如何处理拉取过程中的文件冲突。
假设我们在本地增加一行代码,如下所示
然后项目的其它协作者也修改了这行并将他的修改推送到了服务器
此时我们进行Pull或Sync(先Pull再Push)的操作时,就会产生冲突,如下所示
我们在冲突的文件上双击,可以看到如下的界面
在这里我们可以钩选采用服务器上的版本(左上),也可以钩选采用本地的版本(右上),也可以两边都要。
在编辑完成后,选择接受合并按钮即可。
合并完成后,需要我们再提交一次
由于冲突会导致一次多余的提交记录 ,所以在多人协同开发时,在每次修改前,都执行一下拉取或同步命令,保证本地的文件是最新的。
虽然 在后面我们会介绍如何避免产生这条多余的提交记录,但是我们还是要养成良好的开发习惯。
同步(Sync)
这个我们在前面已经介绍过它的作用了,这的作用就是先拉取(Pull)再推送(Push)。

