介绍
定义
 Git是一个开源的版本控制系统,可以将Git理解为存储文件的仓库,方便多个用户将文件集中存储到服务器中,或从服务器下载文件副本到本地磁盘。
 Git服务并不是简单地存储文件,它会记录每一次文件修改。用户可翻看历史版本的文件,或者删除某些历史修改以还原文件。
 例如,在实际开发过程中,会经常出现一些功能回退。就是以前好用的,现在却出现BUG的情况。
 通过翻看代码文件的历史版本,可较快速地定位哪次修改影响了这个功能,也能知道团队中哪个人做了这次修改。
关系
那么,Git、Gitlab、GitHub是什么关系呢。
 Git可以理解为系统核心,是没有界面的。
 Gitlab、GitHub是在Git基础上建设的平台,里面包含Git服务,这些平台拥有更加完善的后台管理网站。也拥有更加丰富的功能,如项目管理、版本视图、权限管理等。
 所以我们一般不直接使用或部署Git服务,而是使用功能更加完善的Gitlab、GitHub平台服务,其中Gitlab支持私有化部署。
工作原理
 Git是c/s(客户端-服务端)架构的服务,整体结构分4个部分:远程服务、远程仓库、本地Git客户端软件、本地仓库副本。
 远程服务是Git的服务端,更具体的说,就是Gitlab、GitHub等平台,或者是自己在服务器安装的Gitlab。远程服务接受文件获取、上传等请求,并记录每个文件的修改。用户可通过远程服务提供的管理网站管理仓库、历史修改等。
 远程服务端的文件是按仓库为单位存储的,用户可创建多个仓库,一个仓库可以简单地理解为一个文件夹,一个仓库下允许存储多个文件、创建多级文件夹目录。
 本地Git客户端是安装在本地的软件,Git客户端是同步远程仓库与本地仓库副本的关键。用户需要通过Git客户端,从远程服务端克隆、更新本地仓库副本。也需要通过Git客户端,才能将本地仓库副本的修改同步到远程仓库。
 本地仓库副本对应远程服务端中的一个仓库,实质上是根据远程仓库克隆到本地磁盘的一个文件夹。文件夹内的文件对应远程仓库的文件,文件夹内的文件是可以自由操作的,跟普通的文件操作没有区别。
常用操作
通过git上传文件
首先进入你的master文件夹下,右键打开“Git Bash Here” ,弹出命令窗口 ,输入如下语句进行上传
- git init :在此文件夹生成一个.git隐藏文件; 
- git add . : 将文件添加到缓存区( 注意这个”.”,是有空格的,”.”代表这个test这个文件夹下的目录全部都提交,也可以通过git add 文件名 提交指定的文件); 
- git status:查看现在的状态,也可以不看,随你啦,可以看到picture文件夹里面的内容都提交上去了; 
- git commit -m “这里是注释”:提交添加到缓存区的文件 
- git remote add origin https://xxx@xxx/test.git : 添加新的git方式的origin, github上创建好的仓库和本地仓库进行关联(此处使用的SSH代码)  
- git push origin main: 把本地库的所有内容推送到远程仓库(github)上,即上传本地文件 
更新仓库文件
首先进入你的main文件夹下,右键打开“Git Bash Here” ,弹出命令窗口 ,输入如下内容
输入 以下文本即可更新仓库
- git status
- git add -A
- git commit -a -m “update” : 能提交修改过,但是没有添加到缓存区的文件(修改过的就能提交)
- git push origin main -f
删除github中的某个文件(夹)
github上只能删除仓库,但是,却无法删除文件或文件夹,所以只能通过命令来解决。
首先进入你的master文件夹下,右键打开“Git Bash Here” ,弹出命令窗口 ,输入如下内容
- git pull origin main # 将远程仓库里面的项目拉下来
- dir # 查看有哪些文件夹
- git rm -r —cached picture # 删除picture文件夹
- git commit -m “删除了picture文件夹” # 提交,添加操作说明
- git push origin main # 将本次更改更新到github项目上去
合并两个分支
假设当前有两个分支main,branch1,branch1修改了README.md,main分支中文件内容为helol,branch1分支中文件内容为hello
- git branch # 查看分支名称 - * main - branch1 
- git checkout branch1 # 切换至branch1分支 
- git branch - main - * branch1 
- git merge main - 此时合并过程中会产生冲突 
- git status # 获得有关冲突的更多信息 
- cat README.md - 1 
 2
 3
 4
 5
 6- <<<<<<< HEAD 
 hello
 ||||||| merged common ancestors
 =======
 helol
 >>>>>>> main
- 删掉其他内容,保留你最终想要提交的 
- git commit -m “merged from main” # 提交到git 
遇到的小问题
有时通过git bash进入后是以master状态进入,这导致在push的时候无法直接push到main分支,而且在git chekcout branch当中也无法找到main分支,此时可以通过git branch -M main来切换为nmain分支。
参考文献: