Remake | git

Zephyr Lv3

git极简指南

Git

1. 处理数据的方式

记录当前项目快照,而非像其他版本管理工具一样记录更改。

对于在没有改动的文件,会让其指向之前版本的对应文件。

dealdata

git中数据的三种状态

modified : 文件内容被修改,但还未被添加到暂存区

staged : 文件修改被提交到暂存区,下个版本会体现该修改

committed : 修改被提交到本地仓库

git 存储数据的结构

Git 用 tree 来表示每一份项目快照。对于没有修改的文件,git不会重复存储。

git会保留每一个文件的所有版本

object graph

2. 基本用法

git clone URI-of-remote-repo [project-name]

克隆远程仓库到本地

git init

初始化本地仓库

–initial-branch 初始化分支

–bare 创建一个裸仓库(纯git目录,无法进行添加文件等操作,一般用于服务器)

–template 通过模板来构建自定义目录

git diff

查看修改的内容(不包含在暂存区的修改)

–staged 包含在暂存区的修改

git show [id : filename]

显示历史版本/指定版本信息,同时显示文件被修改的具体内容。

类似于 git log -p

git status

查看当前版本的详细情况

git stash

将当前修改保存,并恢复到修改之前的状态

git stash list 查看当前保存的修改

git stash pop 弹出保存的修改,并于后来进行的修改合并

git pull

获取远程仓库的修改,并将其与本地仓库最新版本合并

git merge

合并修改

若出现合并冲突,使用git status查看冲突文件并手动处理

解决冲突后要将文件重新提交到本地仓库

–continue 继续合并 –abort 抛弃本次合并

git reset

取消文件的暂存状态

git reset HEAD filename

git restore

git restore filename 丢弃工作区更改

git restore –staged filename 取消暂存

git fetch

拉取远程某些分支的最新代码,不会执行merge操作

git remote

配置远程仓库

git remote add 远程仓库名 [url]

git remote set-url –add –push 远程仓库名 [url] 修改指定远程仓库的push目的地

git gc

删除一些不必要的object并进行压缩

git reflog expire –expire=now –all 取消操作记录日志

git gc –prune=now 让gc处理当前时间点前的object

密钥配置

ssh-keygen -t ed25519(加密算法) -C [email]

3.原理介绍

3.1 Objects

commit, tree, blob在git中统称为Object

blob:存储文件内容

Tree:存储文件目录信息

commit:存储提交信息,一个commit可以对应唯一的一个版本代码

3.2 Refs

refs的内容就是对应的commit ID

refs/head前缀表示的是分支

3.3历史版本

commit中有parent字段,可通过串联获取历史版本

修改历史版本

git commit –amend

修改上一次提交的message,只会新增一个commit object,相关的tree ,parent都不变

git fsck –lost-found查找悬空的commit(没有refs指向他)

3.4 代码合并

Fast-Forward

不会产生一个merge节点,合并后保持线性历史,如果目标分支有更新,则要通过rebase操作更新源分支

git merge 分支名 –ff-only

fast-forward

Three way forward

三方合并,会产生一个merge节点。

git merge –no-ff

  • 标题: Remake | git
  • 作者: Zephyr
  • 创建于 : 2022-06-30 11:00:12
  • 更新于 : 2023-01-26 12:32:21
  • 链接: https://faustpromaxpx.github.io/2022/06/30/git/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论