被关在宿舍期间因为电脑太卡所以从win11回退到win10版本(真香),回退之后原先通过Git和Hexo弄好的博客设置出现了一些问题,刚好借着这个机会系统学了学Git的逻辑,深感分布式备份和项目管理的美好(下次一起用GitHub写基金标书吧)。在两年前第一次用Git来搭建自己的博客时我只是单纯地以为它是一个windows下便捷的bash窗口,并且深信不疑了整两年。。。这只算一个开端,系统学习基础之后能玩的花样还有很多,后续希望能更新。也希望疫情之下朋友们一切都好。
分布式备份逻辑
Git备份逻辑
团队内部合作
跨团队合作
Git配置
Git用户名及邮箱
1 | git config --global user.name "example" |
本地仓库初始化
cd进入仓库所在文件夹,或者直接在文件夹路径内Git Bash Here
1 | git init |
文件管理
文件创建于工作区
文件从工作区加入暂存区
1 | git add example.py |
文件从暂存区进入本地库并加注释
1 | git commit -m "这个文件为xx版本有什么用" example.py |
注:必须在本地文件地址下才能提交到暂存区和本地库
文件状态查询
1 | git status |
Git版本控制
log参数查询版本
git文件历史查询
1 | git log |
在一行内展示索引
1 | git log --pretty=oneline |
显示回退步数及指针的版本
1 | git reflog |
reset参数调整版本
同时重置工作区、暂存区、本地库
1 | git reset --hard 索引号 |
同时重置暂存区、本地库,工作区不变
1 | git reset --mixed 索引号 |
只重置本地库,暂存区、工作区不变
1 | git reset --soft 索引号 |
删除/找回文件
删除工作区文件
1 | rm example.py |
把删除操作同步到暂存区
1 | git add example.py |
把删除操作同步到本地库
1 | git commit -m "文件已删除" example.py |
本地库找回文件原理为将版本切换至删除操作之前。
暂存区已删除,但本地库仍保留文件,可通过hard参数同步
diff参数比较文件
比较工作区与暂存区的文件
1 | git diff example.py |
批量比较工作区与暂存区的文件
1 | git diff |
比较暂存区与本地库的文件
1 | git diff HEAD example.py |
批量同理
Git分支
Git分支逻辑
Git分支操作
查看当前分支
1 | git branch -v |
查看当前分支文件使用log命令即可
创建新分支
创建新分支的时候会自动clone目前master本地库的文件
1 | git branch example_branch |
切换分支
1 | git checkout example_branch |
Git分支冲突
当branch和master的同一个文件都进行了修改可以通过merge操作来进行整合.
1 | git checkout master |
当文件的同一行都被修改,发生冲突时,会显示冲突文件,状态栏会显示为(master|MERGING)
查看冲突文件内容
1 | cat conflict_example.py |
返回文件内容如下
1 | #merge无冲突内容# |
解决文件冲突后,在master下再次commit即可提交至本地库(注意commit不带文件名)
1 | git status |
使用远程库(GitHub)进行分布式备份
初始化本地库
1 | git init |
创建远程库及别名
在GitHub上创建Repository并命名
https方式下远程库地址为 “https://github.com/username/repository_name.git",一般push的时候用远程库地址的别名
首先在本地查询有无已存在的别名
1 | git remote -v |
确认无别名后进行赋名
1 | git remote add char_name https://github.com/username/repository_name.git |
查询别名可返回该远程库的文件管理权限,fetch表示可获取,push表示可推送
本地库push至远程库
进入本地文件地址
1 | git push char_name branch_name |
远程库clone至本地库
使用clone命令,有目标远程库地址即可
1 | git clone https://github.com/user_name/repository_name.git |
clone命令自动初始化本地库,并将该远程库地址别名为“origin”
GitHub邀请协作账号
Repository页面,settings选项,manage access中invite collaborator
远程库pull至本地库
pull操作等价于(fetch + merge)
fetch操作不改变本地工作区的文件
需要核对fetch到的文件是否确实改变
1 | git fetch char_name branch |
或者
直接进行pull操作
1 | git pull char_name branch |
SSH免密访问远程库
本地生成.ssh目录
1 | cd ~ #进入用户根目录# |
c一定要大写
在.ssh文件夹中找到id_rsa.pub文件,打开文本复制,在GitHub设置中添加SSH keys即可
远程库的SSH地址别名
GitHub网站切换至SSH地址,一般为“git@github.com:user_name/repository_name.git”
1 | git remote add char_name_SSH git@github.com:user_name/repository_name.git |
检查别名后操作和上面没区别
在VSCode上部署Git并链接到GitHub
VSCODE添加本地库
VSCODE对于Git的集成非常方便,Git初始化本地库后在VSCODE源代码管理窗口加入文件夹即可,可以看到commit操作、add操作甚至包括stash操作都有很好的可视化交互
将GitHub部署到VSCODE
在VSCODE中上传一次设置好GitHub远程库就可以,注意事先要确保SSH或HTTP已经能连通
另外VSCODE默认不走配置代理,因为一些我国特色网络问题,需要根据你的上网工具的代理地址重新配置VSCODE,如下(一般V2RayN的本地监听端口都是10809,但是网上查了好多说法不一,大家以自己上网工具的代理设置为准)
设置完成后就可以愉快同步了