git是分布式版本控制系统;

什么是版本控制系统?

比如写游戏,会分版本,从一代的基础上复制并修改为二代,一代保留(类似MC的1.7.10和1.19);

当出了很多个版本之后,一点是想要回去玩之前的经典版本,但在版本丛中不好找;第二点是两个部门合作一个版本时分工不同,需要对一个共享文件进行改动,但是不知道另一个部门在什么时候做了什么改动,要合并内容,会比较难顶;

而一个软件能解决这些毛病,记录每次文件的改动,且允许共同编辑,称其为版本控制系统,目的为了方便开发大项目;

分布式与集中式?

集中式:版本库集中于中央服务器,每次改动会从其中获取新版本,之后推送回去;

分布式:每个人的文件中都有版本库,所以工作时不需联网,合作时,只需要将改动推送给对方,多人合作时,会有一人充当中央服务器;

Git工作流程

do

Workspace:工作区,平时存放项目代码的地方。
Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息。
Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。
Remote:远程仓库(github) ,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。

一个文件夹即可成为工作区,其中初始化后有一个.git后缀子目录,存放Git管理信息;.git里又有暂存区和仓库区;

命令

基本操作

使文件夹成为工作区:

1
git init (指定目录)

添加文件到暂缓区:(name可以是*.加上后缀名,表示全部的一类后缀名都加入)

1
git add (name)

告知后提交,真正加入仓库中:

1
git commit -m "初始化项目版本"

查看仓库当前状态,显示有变更的文件:

1
git status

回退版本:

1
git reset (place)

从暂缓区和工作区中删除:

1
git rm

移动或重命名工作区文件:

1
git mv

远程操作

控制远程仓库:

1
git remote (基本操作)

从远程获取代码库:

1
git fetch

下载远程代码并合并:

1
git pull

上传远程代码并合并:

1
git push

撤回:

1
git revert

实际上是将之前的提交记录的相同状态再提交了一遍;

分支管理

创建分支:(不加name则是列出分支)

1
git branch (name)

带参:-d,表示delete,删除该分支;

​ -f,强制移动;例如:git branch -f main HEAD~3 将main分支移动到HEAD所指的提交记录上;

切换分支:

1
git checkout (name)

带参:-b,意思是先branch,再checkout,可以直接切换到新创的分支里;

name是某个具体提交记录那么就会分离HEAD,name如果是分支名加^,就会移到前一个提交记录;

如果是HEAD加~x,就会移动到前x个提交记录;

合并分支:(当前分支上融合另一个,另一个会存在一个副本)

1
git merge

合并同一分支上且不留副本:

1
git rebase 

带参:-i,交互式rebase;

将其他提交记录直接放到当前分支下:

1
git cherry-pick (name1) (name2)

结尾

更多练习:learngitbranching.js.org

github添加一个远程库命令:

1
2
3
git remote add origin git@github.com:XXXXX
git branch -M main
git push -u origin main