Git记录

作者: 欢西西西 | 来源:发表于2022-05-29 16:06 被阅读0次
image.png

1、初始化

git init

生成一个.git文件夹.png

git中的对象类型:

  1. blob 保存文件内容
  2. commit 其中保存了一个tree对象,它保存了根目录结构的tree对象和blob对象,里面的tree又保存了下一级的结构,所以相当于一个commit对象中保存了本次提交的所有文件的快照。
    也保存了上次提交的commit对象的指针,以便回溯
    也保存了作者和提交备注
  3. tree 保存目录结构,其中可以包括tree对象和blob对象

2、文件管理

哈希值仅根据文件内容生成,无所谓文件名,这样【多文件同内容】的话就只需要保存一份文件内容。
SHA1算法,对于任意长度的输入,都输出160bit(长度40位-2进制转16进制)

2.1 新增一个文件

image.png

2.2 git add wxm.txt

git add 操作文档


此时objects文件夹下新增了一个文件,文件夹命名为哈希值前2位,文件名为剩下的38位、
使用git cat-file -t [hash] 查看此文件的类型:blob
image.png
使用git cat-file -p [hash] 查看此文件的内容:
image.png
image.png

2.3 修改此文件

image.png

2.4 再执行一次git add wxm.txt

image.png

objects文件夹下又生成了一个文件,保存修改后的文件内容


image.png

2.5 提交 git commit -m [提交备注]

image.png

查看提交记录:


image.png

相比之前的4f41和c36d,objects又多了2个文件:


image.png

查看这两个文件的类型:


image.png

查看commit对象的内容:


image.png

查看tree对象的内容:


image.png

2.6 新增文件夹,并 git add testFold

image.png

objects下又新生成了这两个blob类型的文件(注意,此时只生成了2个文件的blob对象,没有生成文件夹对应的tree对象,文件夹对应的tree对象是在commit时才生成)


image.png

2.7 提交并查看提交记录 git log

image.png

上图:最新的commit对象为7eba,上一次是7308


image.png

上图可以看出,commit对象里记录了一个tree对象的指针(888e),这个tree里面保存了当前提交版本的所有文件指针的快照。
还保存了上次提交的commit对象的指针(7308):parent

此时objects下新生成了4个文件:(1个commit,3个tree(其中1个tree是本次提交时所有文件的快照,2个tree是新增的那两个文件夹结构))


image.png

其中:888e就是最新提交那个版本的文件快照,查看888e的内容(从中也可以看出文件结构):

项目下有一个testFold文件夹和wxm.txt

查看testFold文件夹的指针c668:


表示testFold文件夹下有一个fold2文件夹和一个name.txt

查看fold2文件夹的指针b228:


表示fold2文件夹中有个fold.txt文件

2.8 新增一个空的文件夹

发现工作区和暂存区是同步的,空的文件夹不会算作变更。文件夹里必须要有内容。


image.png

3、文件的状态

image.png

还有一个deleted状态


还有一个deleted状态

4、branch和HEAD

4.1 分支介绍

分支是一个有名字的指针,指向一个特定的commit,初始化后默认处于master分支
HEAD指向当前工作的分支,并且指向最新的一次提交

image.png

这个master文件保存了一个哈希值,这个哈希值对应最新一次提交的commit对象


image.png

4.2 分支操作

  1. 新建:git branch [branch name]

    heads里面多了一个wxm_dev
  2. 查看分支:git branch

    master前面有个星号,代表当前处于master分支
  3. 查看当前分支以及指向的commit git branch -v

    image.png
  4. 切换分支 git checkout wxm_dev

    此时星号变到了wxm_dev前面
    HEAD也指向了wxm_dev
  5. 直接切换到某个commit git checkout [commit_id]
    因为分支只是commit的别名,也可以直接checkout出指定提交而不是分支,本质上是一样的。这种操作经常用于查看某一个旧版本的项目快照,不应在这种游离状态下创建提交。

  6. 新建并切换到该分支 git checkout -b [new branch name]

  7. 删除分支 git branch -d [branch name]

  • 不能删除当前功能分支,所以要先切到其他分支
  • 删除分支时,在这个分支上产生的特有的blob文件并不会被删除
  • 可以使用 git branch -D [branch nam]强制删除分支,但不建议,因为-D命令不会校验这个分支是否被合并
  1. 合并分支 git merge [branch name] 将指定分支合并到当前分支
  2. 解决冲突


    image.png

    解决完冲突后add并commit

5、远程仓库

5.1 添加远程仓库

git remote add origin [url]

5.2 push & pull

还自动创建了分支。TODO:加图

6、常用命令

6.1 git status

查看工作区和暂存区的状态

6.2 日志:git log 和 git reflog

  • git log 显示当前分支所有提交过的版本信息,常用选项
    git log [filename]显示指定文件的修改[提交]记录

示例:git log --since=2.weeks --author=longpp --grep=fix --oneline


git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)。
示例:git reflog

6.3 撤销、暂存与回滚

情况一、文件被修改了,但未执行git add操作,想丢弃修改(working tree内撤销)

  • 指定文件:git checkout [filename]
  • 所有修改的文件:git checkout .

情况二、文件已经执行了git add操作,但是本次又不想提交它了(index内撤销)

  • git reset HEAD [filename],取消暂存区的指定文件,此时状态会回到情况一
  • 再对暂存区剩下的要提交的执行commit就行了
  • 不传filename则会取消暂存区所有修改

情况三、文件已修改未git add,需要暂存已经修改的内容

  • 执行git stash save '本次暂存备注'
  • stash并不会存新增的文件,新增的文件要先add再stash
  • 查看暂存的列表: git stash list
  • 弹出暂存列表里最新一次的缓存:git stash pop
  • git stash 文档
  • 如果已经操作了git add又不想提交了,想把修改暂存起来,那先按情况二操作,再暂存

6.4 :git checkout、git reset 和 git revert

常用操作:

命令 提交层面 文件层面 说明
checkout 切换分支/标签git checkout [branch name]git checkout [tag name]。会将当前HEAD指针指向指定的提交 丢弃工作区的修改git checkout [filename]、或将文件切换到某次提交里的版本git checkout [commit_id] [file name] 切换分支只切换HEAD的指针,不会移动分支本身的指针
reset 只应操作那些还未与他人共享过的变更:git reset --hard [commit_id]。否则建议使用revert 将文件从暂存区中移除git reset HEAD [filename] 会改变分支所指向的提交,并且丢弃它之后的提交
revert 撤销公共分支上的变更git revert [commit_id] 不支持 通过新建一个提交来撤销之前的某次提交。因为不会重写提交历史,被认为是一种安全的撤销操作。
从branch dev checkout到master reset到commit 1 revert commit2,则本次自动提交的内容就是还原commit2的更改,实际并不影响之前的提交

6.5 :git blame

git blame [filename] 查看文件每行的作者、修改时间、提交SHA-1值

image.png

6.6 git rm 删除

  • 删除本地和暂存区中的文件:git rm a.txt (前提是文件未修改),如果修改过,会删除失败,此时需要使用 -f 或 --cached
  • git rm -f a.txt 强制删除本地和暂存区中的文件
  • git rm --cached a.txt 删除暂存区中的文件,保留本地文件

6.7 git restore 、rebase

6.8 git diff 和 git diff --cached

7、其他

7.1 垃圾对象

  • 删除分支时,在这个分支上生成过的特有的git对象,并不会被删除
  • 多次修改同一个文件后git add,但只有最后一个版本的被提交了,那么期间生成的blob对象并不会被引用
  • git gc 与 objects/pack文件夹

7.2 标签tag和分支branch

  • 都是指针,指向某次commit对象
  • tag代表了当前的提交点,在给指定提交打了标签后则不会改变。
  • branch的位置会不断变动的,随着提交不断推移

7.3 查看帮助 git add --help

7.4 退出分页 按q键

7.5 vi 编辑器

$ vi a.txt

进入命令模式,按 i 或 a 进入编辑模式,保存文件要按 esc 先退出编辑状态,输入:x保存文件

相关文章

  • git常用指令

    git log -3 查看3条记录git log origin/master 查看远程记录git reset 回...

  • git查看提交记录详情

    git 查看commit 提交记录详情 git log //查看所有的提交记录 git show //查看最新的提...

  • 2.3 Git 基础 - 查看提交记录

    提交记录git log 2.2 Git 基础 - 记录每次更新到仓库(删除和改名)2.4 Git 基础 - 撤销操...

  • Git常用命令

    git常用命令记录 git提交一个没有任何改动的记录:git commit -m "empty commit" -...

  • git 并不简单啊

    git log 查看历史记录 git log --pretty=oneline 优美的查看历史记录 git res...

  • GIT commit 回退

    git add .git commit -m "xxx" git log // 查看commit记录commit ...

  • log 和 reflog

    git log是查看commit的历史记录。 git reflog是查看所有git操作的历史记录。

  • Git使用记录

    本地Git撤回提交记录 使用git log查看提交的历史记录 使用git reset --soft head~1撤...

  • GIT-Reflog

    1、git reflog : 查看操作记录 2、撤销某次记录 git reset --soft HEAD@{1} ...

  • Git的使用

    star 记录一下Git的使用,逐步用到了,一步一步更新 GIT 常用指令记录 START 记录一下,GIt的使用...

网友评论

      本文标题:Git记录

      本文链接:https://www.haomeiwen.com/subject/iavgprtx.html