Git版本控制

1. Git概述

1.1 开发中的应用

  1. 数据备份,上传到仓库,硬盘寄了也不会丢失。
  2. 代码还原,修改后会留下之前的版本,后面发现需要之前版本的代码可以得到。
  3. 协同开发,多个人合作完成同一个项目。
  4. 追溯问题代码,可以知道代码是谁写的,什么时候写的。

1.2 版本控制器的方式

  1. 集中式版本控制工具:版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,必须联网工作,局域网或互联网。个人修改后提交至中央版本库(SVN、CVS)
chrome_pbxtG07hxm.png
  1. 分布式版本控制工具:每个人电脑上都是完整的版本库,无需联网。多人协作只需要把修改推送给对方,就可以互相看到修改了(Git)。
chrome_YZlkofgN4v.png

分布式版本控制系统(Distributed Version Control System,简称 DVCS)好处在于每个人都拥有完整的版本库,这样就算某一台设备丢失了数据,也可以从其他设备上重新获得。而

1.3 Git工作流程图

chrome_t1iQKHrI43.png

命令如下:

  1. clone (克隆):从远程仓库中克隆代码到本地仓库
  2. checkout (检出):从本地仓库中检出一个仓库分支然后进行修订
  3. add (添加):在提交前先将代码提交到暂存区
  4. commit (提交):提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. fetch (抓取):从远程库, 抓取到本地仓库,不进行任何的合并动作,-般操作比较少。
  6. pull (拉取):从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge
  7. 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"

效果如下:

mintty_rZTKS8wImy.png

2.3 别名

首先打开用户目录(C:\Users\xxx)创建.bashrc文件

mintty_JkCGVfo6c6.png

之后打开.bashrc文件,输入一下内容:alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'保存。

notepad___wFVWE8KL0F.png

最后执行source ~/.bashrc指令即可。

mintty_U36m2y6WJF.png

3. Git本地仓库

3.1 获取本地仓库

创建一个空的目录作为本地的Git仓库,进入这个目录,右键Git Bash Here然后执行git init命令,创建成功后自动生成.git目录

mintty_IdXRudiri8.png

3.2 基础操作指令

Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。

chrome_woX5LvwoZk.png

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 解决冲突

在主分支上修改了一个文件,再合并过来的分支上修改了同一个文件,就会产生冲突。

解决冲突步骤如下:

  1. 处理文件中冲突的地方(自行修改)
  2. 将解决完成的文件加入暂存区(add)
  3. 提交到仓库(commit)

3.3.7 开发中分支使用的原则与流程

  • master(生产)分支:线上分支,主分支,中小规模项目作为线上运行的应用对应的分支
  • develop(开发)分支:是从master创建的分支,一般作为开发部门的主要开发分支,阶段开发完成后就merge到master分支上
  • feature/xxx分支:从develop上分离出来的,做同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支
  • hotfix/xxx分支:热补丁,直接从master分离出来,修复完成后合并给masterdevelop
  • 其他的还有test(测试)、pre(预上线)等等,具体还要看团队具体情况

chrome_jy5ZE1A5Me.png

4. Git远程仓库

4.1 常用的托管服务[远程仓库]

经典的GitHub,以及国内的码云(Gitee),还有企业搭建自己的远程仓库使用的GitLab。

4.2 创建仓库配置SSH公钥

这里用到的是国内的码云,这个比GitHub要稳定,不然有的时候推GitHub推不上去。

chrome_dk2DXzsr9C.png

所有东西都不要选,因为是之后从我们本地推上去。

之后再配置公钥:

在Git Bash中输入ssh-keygen -t rsa,之后不断回车(不需要输入)。

之后再使用 cat ~/.ssh/id_rsa.pub命令查看公钥。

最后用ssh -T git@gitee.com来测试是否成功。

mintty_ugcsgjgjMw.png

4.3 远程仓库操作

4.3.1 添加远程仓库

在Gitee中创建的仓库里复制SSH地址:

chrome_ltVb63a57l.png

之后回到Bash中输入git remote add origin xxx

mintty_vAem3agxwi.png

其中的origin是远程仓库的标识,xxx是之前在Gitee里复制到的SSH地址。

4.3.2 查看远程仓库

最后可以使用git remote命令查看到底是否添加成功。

mintty_9wzNAYWAXP.png

4.3.3 推送到远程仓库

命令:git push [-f][--set-upstream] [远端名称[本地分支名][:远端分支名]]

  • 如果远程分支名和本地分支名称相同,则可以只写本地分支

    git push origin master

  • 其中-f是强制覆盖,因为可能云端和本地有冲突(一般禁用)

  • --set-upstream推送到远端的同时并且建立起和远端分支的关联关系。
    git push --set-upstream origin master

  • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
    git push将master分支推送到已关联的远端分支。

mintty_PhfFhSbvtm.png

4.3.4 关联仓库

关联本地仓库和远程仓库很有意思,首先我们可以通过git branch -vv来查看本地仓库与远程仓库的对应关系。

mintty_OqUKS2FVyB.png

之后使用git push --set-upstream origin master:master来进行绑定,最后可以查看一下。

mintty_gA9ofy1TFP.png

此时就可以直接用git push来进行推送了。

4.3.5 从远程仓库克隆

从远程仓库找到克隆的地址

chrome_xbJX8eddj9.png

直接在桌面git bash,输入git clone xxx,xxx是上面复制的地址。

mintty_PaFCVu9x0w.png

可以看到test被创建到桌面了,如果想另外起一个名字在xxx后面加上名字即可如:git clone xxx git_test此时创建的文件夹名为git_test

注意,克隆之后的操作要进入文件夹后再次git bash,目前的窗口路径是桌面。

一般来讲,克隆只需要一次,后续操作有另外指令完成(fetch、pull)。

4.3.6 从远程仓库抓取和拉取

直接创建一个file2.txt从一个本地库(A)push到远程仓库。(直接快进模式)

image.png

另一个本地库(B)显然是没有file2.txt的,此时我们从远程仓库抓取(fetch)一下,git fetch一下:

mintty_0NYKpTEk16.png

发现本地是在update file1这里而远程仓库已经是add file2了。此时我们可以git merge origin/master来进行一个合并(快进模式)。

mintty_FoXAvCNHWa.png

上面让B仓库同步远程仓库的步骤需要两步,我们可以直接用拉取(pull)一步到位。

4.3.7 远程仓库解决冲突

A已经提交了修改,然后Bfetch远程仓库发现已经修改了。

chrome_TJePFPmrWu.png

此时再pull一下,显然会有冲突失败:

chrome_YKF811t60C.png

此时需要其中一人修改之后重新上传到远程仓库,效果如下:

chrome_v6umwUpiqn.png

5. 在IDE中使用Git

以下操作以GoLand为例

5.1 在GoLand中配置Git

设置-版本控制-路径

goland64_ofwCcXLAdp.png

5.2 在GoLand中操作Git

5.2.1 创建项目远程仓库

不多说了创建就好了

chrome_YgzDraEpF9.png

保存一下SSH的地址。

5.2.2 初始化为Git仓库

在IDE中点击VCS,选择创建Git仓库...

goland64_u2vCtZIRyx.png

此时GoLand的右上角就会出现以下工具栏

goland64_kR0wru5kyU.png

可以通过↙来更新代码,✔来提交代码,↗来推送代码。

5.2.3 提交代码

先点击✔,左侧选择需要提交的文件,在文本框中记录修改的内容,点击提交即可。

goland64_RA81FFStI8.png

点击左下角的Git还可以查看提交的日志:

goland64_X6CIskJF2j.png

5.2.4 推送代码

把代码上传到远程仓库,首先要定义远程,把之前记下来的SSH地址复制到这里。

goland64_kQg3NSpeNV.png

点击推送

chrome_K04C3oKlUx.png

推送成功

5.2.5 更新、克隆仓库

更新仓库可以看修改的描述

goland64_raAsj1QCq1.png

克隆仓库

goland64_ocEnjTH41i.png

从远程仓库获得SSH的地址

chrome_lwDxu8YfG7.png

输入到URL里即可

goland64_JxsKhzL96p.png

5.2.6 解决冲突

当提交的时候发现出现冲突,一种方法是用IDE给的管理器来操作

goland64_6GgFDqt939.png

通过点击接受来选择位置,最后应用即可。

goland64_7v8OqqwKuM.png

5.2.7 分支操作

在Git管理中选中想要设置分支的位置右键选择新建分支

5TF2kil4tl.png

然后输入新分支名称点击创建即可

goland64_XyG3afkZDk.png

如果想要切换分支(checkout)或者合并(merge)分支就从右下角选择

JoCasK1iQj.png

这里的签出就是checkout切换分支。

5.2.8 IDE终端编程GIT BASH

设置里把终端地址改成bash的就可以了。

goland64_3zJ5WkYLe5.png

posted @   WtcSky  阅读(114)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示