Git笔记| 青训营笔记

145 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记。

.git文件

通过tree命令查看.git文件的目录结构,其中HEAD文件是保存当前的分支信息的,hooks中的.sample是一些示例告知如果进行编写,config文件就是一些配置信息

2.通过git remote add来添加一些(同一个Origin设置不同的Push和Fetch URL)

git remote add origin git@github.com:git/git.git
git remote set-url --add --push origin git@github.com:myrepo/git.git

通过这两个命令来更高fetch和push 到不同的地方

SSH私钥配置

通过命令

ssh-keygen -t ed25519 -C "you_email@example.com"
之后会生成一个密钥存放在~/.ssh/这个文件目录中中(命令行会有提示)

之后将.pub后缀名的文件中的内容赋值到github的配置中去配置SSH密钥,这里有个问题就是如果后面带了@xxx.com
如果在gitee中也使用了这个ssh密钥会导致github上的密钥信息失败,连接不上github会拒绝访问22号端口
解决:不使用后面的邮箱参数,ssh-keygen -t ed25519 就可以使用同一个ssh密钥对gitee和github进行访问

git add .

通过这个命令能够将文件提交到暂存区

通过查看.git文件的目录结构

在object目录下多了一个 71f81a...的文件

通过命令

git cat-file -p 'id' 能够查看文件内容(因为文件是加密的不能直接进行查看)

git commit -m

将暂存区中的数据提交

object目录多出了2个文件

第一个是存储目录树的信息文件,存储目录信息

最后一个文件存储目录树信息,author信息,commiter信息,以及内容信息

Object

commit / tree / blob 在git中统一称为Object ,除此之外还有个tag 的 Object

Blob

存储文件内容

Tree

存储文件的目录信息

Commit

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

信息的串联

1.通过Commit寻找Tree信息,每个Commit 都会存储对应的TreeID

2.通过Tree 存储的信息,获取到对应的目录树信息

3.从 Tree 中获得 Blob 的ID, 通过Blob ID 获取对应的文件内容

创建一个新分支

git checkout -b test

在refs文件夹下会多出一个test文件

refs的内容就是对应的CommitID

将ref当作指针, 指向对应的commit来表示当前的版本

refs/heads :表示的是分支 refs/tags :表示的是标签 (指稳定的版本)


#### 通过git tag 命令创建一个tag

指向的就是存储commit 信息文件的ID

#### Annotation Tag (附注标签:为tag提供一些描述信息)

v0.0.2中的指向是指向的新增的object

实际指向的还是e5开头的id信息,不过会附带一些其他的信息,比如"Annotation tag test"

# 获取历史版本

Commit中会有parent字段,可以通过这个字段来获取历史版本的代码


# 修改历史版本

1.commit —amend

修改最近一次的 commit信息,修改之后 commit id 会变

2.  rebase

通过 git rebase -i HEAD-3 可以实现对最近3个 commit 的修改

1.  合并commit
1.  修改具体的commit message
1.  删除某个commit
1.  filter -branch

可以指定删除所有提交中某的某个文件或者全局修改邮箱地址等操作

# Git GC

-   通过git gc命令,能够删除不需要的object,以及会对object进行打包减小仓库体积

# Reflog

-   用于记录操作日志,防止误操作后数据丢失,通过reflog来找回丢失的日志,需要手动将日志设置为过期

# 指定时间

git gc prune=now 指定的是修剪多久之前的对象,默认是两周前

会将之前的文件夹打包



# Git Clone & Pull & Fetch

### Clone

拉取完整的仓库到本地目录,可以指定分支、深度

### Fetch

将远端某些分支最新代码拉取到本地,不会执行merge操作

会修改refs/remote内的分支信息,如果需要和本地代码合并需要手动操作

### Pull

拉取远端某根治,并和本地代码进行合并,操作等同于 git fetch + git merge

也可以通过 git pull —rebase 完成 git fetch + git rebase 操作

可能存在冲突,需要解决冲突

# 将本地代码托管到github步骤

.首先在本地建立一个目录,然后进入该目录,如我在我的D盘建立一个Code文件夹,将自己想要上传的代码放在该文件夹里

2.然后在Git Bash 进入该路径

3.接着初始化它

命令:$ git init


4.将本地项目工作区的所有文件添加到暂存区

命令:$ git add .


5.将暂存区的文件提交到本地仓库

命令$ git commit -m “excu”


1.  将本地仓库关联到Github上

 命令:$ git remote add origin http:[//github.com/用户名/仓库名.git]
之后将本地代码上传到github仓库中
git push origin xyf:xyf (当远端不存在xyf分支的时候这个命令会创建一个xyf分支同时将本地代码提交到这个分支中)