Git版本控制
1. Git概述
1.1 开发中的应用
- 数据备份,上传到仓库,硬盘寄了也不会丢失。
- 代码还原,修改后会留下之前的版本,后面发现需要之前版本的代码可以得到。
- 协同开发,多个人合作完成同一个项目。
- 追溯问题代码,可以知道代码是谁写的,什么时候写的。
1.2 版本控制器的方式
- 集中式版本控制工具:版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,必须联网工作,局域网或互联网。个人修改后提交至中央版本库(SVN、CVS)

- 分布式版本控制工具:每个人电脑上都是完整的版本库,无需联网。多人协作只需要把修改推送给对方,就可以互相看到修改了(Git)。

分布式版本控制系统(Distributed Version Control System,简称 DVCS)好处在于每个人都拥有完整的版本库,这样就算某一台设备丢失了数据,也可以从其他设备上重新获得。而
1.3 Git工作流程图
命令如下:
- clone (克隆):从远程仓库中克隆代码到本地仓库
- checkout (检出):从本地仓库中检出一个仓库分支然后进行修订
- add (添加):在提交前先将代码提交到暂存区
- commit (提交):提交到本地仓库。本地仓库中保存修改的各个历史版本
- fetch (抓取):从远程库, 抓取到本地仓库,不进行任何的合并动作,-般操作比较少。
- pull (拉取):从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge
- push (推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库
2. Git安装与配置
2.1 安装
直接官网下载,一直下一步就完了。
2.2 配置
安装好Git以后首先要做的事情就是设置用户名称
和Email地址
,因为每次Git提交都会使用该用户的信息。
打开Git Bash,通过以下指令设置用户信息:
git config --global user.name "wtcsky"
git config --global user.email "1059658793@qq.com"
效果如下:
2.3 别名
首先打开用户目录(C:\Users\xxx)创建.bashrc
文件
之后打开.bashrc
文件,输入一下内容:alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
保存。
最后执行source ~/.bashrc
指令即可。
3. Git本地仓库
3.1 获取本地仓库
创建一个空的目录作为本地的Git仓库,进入这个目录,右键Git Bash Here
然后执行git init
命令,创建成功后自动生成.git
目录
3.2 基础操作指令
Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。
3.2.1 查看文件状态
那你在目录里写文件,刚创建的就是未跟踪,已经创建了修改了的就是未暂存。
查看状态用指令git status
3.2.2 添加工作区到暂存区
然后把工作区的文件添加到暂存区的指令是git add
,无论是刚创建还是修改都一样。如果要把所有文件都添加进去就git add .
,添加指定文件就是git add filename
3.2.3 提交暂存区到本地仓库
把残存去的内容上传到本地仓库的当前分支,指令是git commit -m "注释内容"
,在引号里添加一些描述(干了啥)。
3.2.4 查看提交日志
看看之前对本地仓库做了什么操作git log [option]
,后面的option
可以加上以下的内容:
- --all 显示所有分支
- --pretty=oneline 显示为一行
- --abbrev-commit 更简短的输出
- --graph 图的形式展示
3.2.5 版本回退
使用git reset --hard commitID
进行版本的切换,其中的commitID
要通过日志查看。
选中就是复制,鼠标中键就是粘贴
这样回退之后,再用git log
查看发现在目的版本之后的日志信息看不到了。
当然它并没有消失可以通过git reflog
再进行重新查找commitID
。
3.2.6 忽略文件
有的文件不想让git管理怎么办?
创建一个.gitignore
的文件,把要忽略的文件添加进去,如果有统一的要求也可以使用通配符,比如*.a
是把所有后缀为a的文件忽略。
3.3 分支
把你的工作从开发主线上分离开来进行重大的BUG修改、开发新的功能,以免影响开发主线。
3.3.1 查看本地分支
默认是使用的是master
分支,使用命令git branch
查看。
3.3.2 创建本地分支
创建分支的时候是把整个复制下来,之后的修改这两条分支互不相干。
git branch 分支名
值得注意的是,新建的git仓库默认的master
分支要在进行了一次有效地commit之后才会真正建立,否则就像声明了对象但没有初始化一样无法使用。
3.3.3 切换分支
git checkout 切换到的分支名
切换到a分支你的仓库中就只显示a分支的内容,切换到b分支就只显示b分支的内容。
按理来说只能切换到已经存在的分支,但是使用git checkout -b 分支名
就会先创建再切换到该分支。
3.3.4 合并分支
一般来说是把分支合并到master
分支。
先切换到master
然后再git merge 分支名
,就可以把它合并到master
分支了。
3.3.5 删除分支
不能删除当前分支,只能删除其他分支
git branch -d 分支名
删除分支时需要做各种检查。
git branch -D 分支名
强制删除,不需要做检查。
当你的分支没有merge到主分支的情况下删除(分支有主分支没有的修改时),就会无法用-d
删除,此时可以使用-D
来确认删除(防止误操作)。
3.3.6 解决冲突
在主分支上修改了一个文件,再合并过来的分支上修改了同一个文件,就会产生冲突。
解决冲突步骤如下:
- 处理文件中冲突的地方(自行修改)
- 将解决完成的文件加入暂存区(add)
- 提交到仓库(commit)
3.3.7 开发中分支使用的原则与流程
- master(生产)分支:线上分支,主分支,中小规模项目作为线上运行的应用对应的分支
- develop(开发)分支:是从
master
创建的分支,一般作为开发部门的主要开发分支,阶段开发完成后就merge到master
分支上 - feature/xxx分支:从develop上分离出来的,做同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到
develop
分支 - hotfix/xxx分支:热补丁,直接从master分离出来,修复完成后合并给
master
和develop
。 - 其他的还有test(测试)、pre(预上线)等等,具体还要看团队具体情况
4. Git远程仓库
4.1 常用的托管服务[远程仓库]
经典的GitHub,以及国内的码云(Gitee),还有企业搭建自己的远程仓库使用的GitLab。
4.2 创建仓库配置SSH公钥
这里用到的是国内的码云,这个比GitHub要稳定,不然有的时候推GitHub推不上去。
所有东西都不要选,因为是之后从我们本地推上去。
之后再配置公钥:
在Git Bash中输入ssh-keygen -t rsa
,之后不断回车(不需要输入)。
之后再使用 cat ~/.ssh/id_rsa.pub
命令查看公钥。
最后用ssh -T git@gitee.com
来测试是否成功。
4.3 远程仓库操作
4.3.1 添加远程仓库
在Gitee中创建的仓库里复制SSH地址:
之后回到Bash中输入git remote add origin xxx
。
其中的origin是远程仓库的标识,xxx是之前在Gitee里复制到的SSH地址。
4.3.2 查看远程仓库
最后可以使用git remote
命令查看到底是否添加成功。
4.3.3 推送到远程仓库
命令:git push [-f][--set-upstream] [远端名称[本地分支名][:远端分支名]]
。
-
如果远程分支名和本地分支名称相同,则可以只写本地分支
git push origin master
-
其中
-f
是强制覆盖,因为可能云端和本地有冲突(一般禁用) -
--set-upstream
推送到远端的同时并且建立起和远端分支的关联关系。
git push --set-upstream origin master
-
如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
git push
将master分支推送到已关联的远端分支。
4.3.4 关联仓库
关联本地仓库和远程仓库很有意思,首先我们可以通过git branch -vv
来查看本地仓库与远程仓库的对应关系。
之后使用git push --set-upstream origin master:master
来进行绑定,最后可以查看一下。
此时就可以直接用git push
来进行推送了。
4.3.5 从远程仓库克隆
从远程仓库找到克隆的地址
直接在桌面git bash
,输入git clone xxx
,xxx是上面复制的地址。
可以看到test被创建到桌面了,如果想另外起一个名字在xxx后面加上名字即可如:git clone xxx git_test
此时创建的文件夹名为git_test
。
注意,克隆之后的操作要进入文件夹后再次git bash
,目前的窗口路径是桌面。
一般来讲,克隆只需要一次,后续操作有另外指令完成(fetch、pull)。
4.3.6 从远程仓库抓取和拉取
直接创建一个file2.txt
从一个本地库(A)push
到远程仓库。(直接快进模式)
另一个本地库(B)显然是没有file2.txt
的,此时我们从远程仓库抓取(fetch)一下,git fetch
一下:
发现本地是在update file1
这里而远程仓库已经是add file2
了。此时我们可以git merge origin/master
来进行一个合并(快进模式)。
上面让B仓库同步远程仓库的步骤需要两步,我们可以直接用拉取(pull)一步到位。
4.3.7 远程仓库解决冲突
A已经提交了修改,然后Bfetch
远程仓库发现已经修改了。
此时再pull
一下,显然会有冲突失败:
此时需要其中一人修改之后重新上传到远程仓库,效果如下:
5. 在IDE中使用Git
以下操作以GoLand为例
5.1 在GoLand中配置Git
设置-版本控制-路径
5.2 在GoLand中操作Git
5.2.1 创建项目远程仓库
不多说了创建就好了
保存一下SSH的地址。
5.2.2 初始化为Git仓库
在IDE中点击VCS
,选择创建Git仓库...
此时GoLand的右上角就会出现以下工具栏
可以通过↙来更新代码,✔来提交代码,↗来推送代码。
5.2.3 提交代码
先点击✔,左侧选择需要提交的文件,在文本框中记录修改的内容,点击提交即可。
点击左下角的Git还可以查看提交的日志:
5.2.4 推送代码
把代码上传到远程仓库,首先要定义远程,把之前记下来的SSH地址复制到这里。
点击推送
推送成功
5.2.5 更新、克隆仓库
更新仓库可以看修改的描述
克隆仓库
从远程仓库获得SSH的地址
输入到URL里即可
5.2.6 解决冲突
当提交的时候发现出现冲突,一种方法是用IDE给的管理器来操作
通过点击接受来选择位置,最后应用即可。
5.2.7 分支操作
在Git管理中选中想要设置分支的位置右键选择新建分支
然后输入新分支名称点击创建即可
如果想要切换分支(checkout)或者合并(merge)分支就从右下角选择
这里的签出就是checkout切换分支。
5.2.8 IDE终端编程GIT BASH
设置里把终端地址改成bash的就可以了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现