介绍
定义
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分支。
参考文献: