前排提醒
本文为青训营活动中git初学者的使用感受与初步经验,可能有以下缺点
- 内容介绍有失偏颇,什么重要什么不重要不一定准确
- 有些知识错漏或与实际情况出现偏差,知识范围有限
- 用初学者通俗易懂的方式介绍,不会有详细的"为什么",取而代之的是"怎么做"在现阶段就够用
- 使用vscode作为编辑器介绍而非纯命令行,很多git命令不会提及,会倾向于通过GUI的方式实现相同功能(如果比命令方式更方便的话)
- 由于网络环境原因,与Github的连接需要自备加速
Git是什么
为了提高团队远程协作开发效率,Git作为版本控制工具应运而生,其有以下几个最主要的特点:
- 会保存项目开发的历史版本,方便查看相关信息或必要时版本回退处理
- 版本更新时不会将项目全部替换,而是自动推断新版本和老版本有哪些差异变动,只更新这些变动的部分,提高版本更新时的效率
- 团队协作可以每人创建不同的分支、开发不同的功能而互不干扰
Git的使用
一些前置操作
Git可以在www.git-scm.com
直接下载安装,这里其他的教程很多,流程也比较简单,不做过多介绍,安装完成之后在随便一个文件目录右键打开Git Bash,设置你的用户名和邮箱(哪怕是虚假的,也是必要的,因为Git需要记录提交者信息)
git_bash
git config --global user.name xxx
git config --global user.email xxx
此外,在vscode中安装GitLens插件可以看到更多信息,方便我们去使用
创建仓库并拉取到本地
初学者学习使用Git最好是在Github上创建测试仓库来使用,点击New来新建一个测试仓库,勾选add a readme.md,我们就通过这个文件来学习Git的简单使用。其他选项保持默认。
在我们的目录下使用如下命令可以将远程的代码仓库拉取到本地。
git_bash
git clone https://github.com/HULER-cloud/start // 填你需要拉取的仓库的URL
在vscode左侧"源代码管理"选项卡可以查看我们拉取下来的仓库的一些相关信息:
- repositories 目前正在对哪个仓库进行源代码管理
- commit 当前仓库的历史提交记录
- branches 仓库的分支概览
- contributors 代码贡献者,谁提交了代码
- remote 远程仓库链接(源)
其他选项我目前还没有使用到,所以先不做介绍。
你也可以使用以下命令来优先在本地创建git仓库,并创建远程仓库(源)地址链接
git_bash
git init
git remote add origin https://github.com/HULER-cloud/start
或者使用显而易见的蓝色按钮"初始化git仓库"来操作,随后再按照后续的流程推送到远程仓库上去,而不是从远程拉取创建好的仓库下来。
更改、暂存与提交
我们首先对README.md进行一些修改操作,保存之后可以看到"更改"位置出现了被打上M
标记的README.md文件,这是"此文件被修改"的意思。如果是新建一个文件,则在相同的位置会出现一个U
标记。
点击左侧的弯曲箭头可以放弃此次更改,如果是新建文件的话,此操作会将新建的文件删除。
可以使用命令
git_bash
git add README.md
或是通过点击M
左侧的加号来将所做的更改提交到暂存区
对于暂存区的文件,可以点击减号将文件重新放回更改区
使用命令
git_bash
git commit "update README.md"
或是在上方输入框输入附加信息之后点击蓝色的提交按钮来进行提交
注意,附加信息是必要的,建议使用简短有概括性的问题概述这次提交做了什么更改,方便团队其他成员(当然也包括自己)查看理解开发流程与进度。
当然,也可以通过在commits选项中,找到具体的提交记录,手动点击弯曲箭头(undo commit)的操作来回退提交。
推送代码
在一次成功的提交之后,我们可以看到这些变化:
- commits选项多出了一条提交记录
- branches选项的main分支变绿了(更新特效)
- 最上方的"提交"蓝色按钮字样变成了"同步更改"
现在我们可以使用命令
git_bash
git push
或是点击上面的"同步更改"蓝色按钮来将我们本地所做的修改推送到远程仓库上去,现在我们在Github上面已经可以看到刚刚本地所做的更改与推送了。
当然,可能存在一些本地仓库与远程仓库冲突的问题(可能是由于其他团队成员先一步提交了他的开放进度,导致你的仓库和远程仓库在一些文件上存在冲突,虽然一般情况下由于分支的存在不会这样,但是也有可能存在多名开发人员在同一分支操作的极端情况)。
这时候不要强制push(虽然理论上能做到这件事),推荐使用命令
git_bash
git fetch // 只拉取,不合并
git pull // 直接合并,在有把握的时候使用
来将远程的仓库重新拉取最新的更新过来,和你预备提交的内容一一检查冲突之处,解决之后再进行push
分支
在Git中,分支功能是实现团队协作功能最最重要的功能,它允许每个成员针对项目的不同部分进行开发再进行合并处理,极大地提高了协作开发的效率。对一个分支本身的任何操作,都影响不到其他已经存在的分支内容。
项目代码仓库初始化的时候会自带一个main分支作为主干,一般情况下不允许团队开发人员在main分支下直接进行开发,而是需要创建自己的分支,在开发完成后提交这个单独创建的分支。最后由专门的人员谨慎进行分支的合并处理。
对于拉取到本地的代码仓库,可以使用命令来创建并切换到一个新的分支"other"(名字是可以更改的)。
git_bash
git branch other
git switch other
或是通过branch选项的加号和弯曲箭头来手动创建并切换分支。
删除分支则可以通过在branch关键字后添加-d
参数来操作,GUI操作不再赘述。
现在我们在other分支下对README.md做一些修改并提交。此时在main分支下的README.md并不能看见第5行新增的这句话。
这时候我们可以直接点击上方的蓝色按钮进行"发布Branch",就可以在远程仓库看见提交的分支了。
对于分支的合并操作,可以在本地在main分支下(实际上其他分支也行,但是不推荐)使用命令
git_bash(main)
git merge other
来将other分支同步合并到main分支。 也可以在Github远程仓库下跟随提示进行合并。
怎么给其他人的仓库推送更改?
前面介绍的都是在自己创建的测试仓库下进行的学习,当然实际开发环境中往往需要合作的代码仓库并不是在自己的账号下的,这时候我们可以在Github上点进目标代码仓库,点击fork按钮就可以在自己的账户仓库中复制一份目标仓库。
这是我在首页上随便点,然后fork的一个项目,可以看到项目名称下面有提示"forked from xxx",这时候你对这个复制过来的仓库做的更改不会对原始仓库有任何影响,可以放心按照前面的流程进行自己的开发。
在这个仓库下进行开发之后(注意最后的推送选择新分支),如果有需要对原始仓库进行建设性更新,可以点进上方选项卡的"pull request"。创建新的pull request并推送到原始仓库那里去,由所有者(或其他有权限的人)进行审核与处理。