git 0基础入门—git入门与实践(2)—详细图解git删除及移动操作及HEAD、master!

    技术2022-07-10  134

    文章目录

    git入门与实践(2)1. 删除文件1. 1 命令行删除1. 1. 1 强制删除 1. 1. 2 手动删除工作目录中的文件1. 1. 3 删除Git仓库中的,保留工作目录中的文件 2. 移动文件2. 1 移动文件的妙用2. 1. 1 重命名文件原理2. 1. 2 git上移动文件(或重命名文件)原理 3. 查看功能3. 1 git status3. 1. 1 git status -s3. 1. 1. 1 short状态码3. 1. 1. 2 扩展3. 1. 1. 3 状态码总结 3. 2 git diff3. 2. 1 git diff --staged 3. 3 git log 查看日志3. 3. 1 git log -p3. 3. 2 git log -n3. 3. 3 git log --stat3. 3. 4 git log --pretty3. 3. 4. 1 -oneline 哈希和描述3. 3. 4. 2 -short 哈希、作者、描述3. 3. 4. 3 -full 哈希、作者、提交者、描述3. 3. 4. 4 -fuller 哈希、作者、日期、提交者、提交日期、描述3. 3. 4. 5 -format 定制要显示的记录格式 4. HEAD和master4. 1 提交对象4. 1. 1 搜索引擎快照4. 1. 2 存储快照 4. 2 master分支4. 3 HEAD

    git入门与实践(2)

    1. 删除文件

      可能大家第一想到的是手动删除:

      手动删除mytest文件

      此时删除的文件,仅仅删除的工作区的,而git仓库中的文件仍然存在!

    1. 1 命令行删除

    git rm <file> 删除git仓库中记录的文件,并且不保留在工作目录中

    此时执行完删除后,提示提交到仓库。

      此时不仅删除了工作区的文件,仓库中也同样删除了!

      我们不需要先手动删除工作区的文件,git rm <file> 会同时删除工作区和仓库中的文件。

    1. 1. 1 强制删除

    git rm -f(force) <file> 强制删除

    1. 1. 2 手动删除工作目录中的文件

      windows可直接手动删除,无需借助命令。

    1. 1. 3 删除Git仓库中的,保留工作目录中的文件

    git rm --cache <file>

      假如我们现在工作区有两个文件一个y.txt,一个z.txt。我们不想提交z.txt,但是误提交了,直接用git rm 会同时删除工作区和仓库的文件。

    git rm --cache z.txt

    z.txt文件就回到了未被追踪的状态了,

      如果我们修改了a.txt文件,然后想用git rm 删除,发现失败了。

      git 为了防止误操作,它有一个安全机制,假如有文件发生了修改等,还没被提交,如果你删除这个文件,很容易造成,你对该文件的修改丢失,因为还没被提交就删除了,就会导致后面如果想找回修改的内容,就查不到记录了。git为了防止出现这种类似问题,git要求修改后的文件先提交后删除才行。

      git官方说明,如果想找回任何记录,就详细提交每一次记录,只要提交了,就一定可以找回。

      如果确定以后再也不用这个文件,非要删除,可以使用强制删除命令:

    git rm -f a.txt

      注意:不要随便就强制删除,因为很容易导致一些修改你没有提交,就会丢失这些暂存信息。

    2. 移动文件

    2. 1 移动文件的妙用

    重命名

    移动文件

    git mv file_from file_to

    以上命令相当于以下三条

    mv file_from file_to

    git rm file_from

    git add file_to

      我们新建一个文件夹:mkdir first

    git mv d.txt .\first\

    rename d.txt => first/d.txt (100%) 这里即为重命名操作!

    2. 1. 1 重命名文件原理

      我们修改y.txt 的文件名:

      mv z.txt b.txt

      从这里我们可以发现,重命名一个文件,系统其实是先删除z.txt,再创建一个b.txt,并同时把a.txt的内容复制进去。因此这里才会有一个删除文件操作,以及未追踪的文件b。

      接下来,我们还需要删除仓库的z.txt文件,并把b.txt放入暂存区

      实际上git根据我们的操作,就知道我们的最终目的也是重命名了。

    2. 1. 2 git上移动文件(或重命名文件)原理

    git mv file_from file_to

    以上命令相当于以下三条

    mv file_from file_to

    git rm file_from

    git add file_to

      要想实现移动文件的原理,我们要是先删除文件,再添加文件是不行的,git是无法判断我们是想移动文件的,必须先告诉它我们要移动文件了才行。

    new-item 2.txt

    git add 2.txt

    git rm 2.txt

    git add 22.txt

      git不会认为是再改名字,只能认为是将其加入暂存区。失败的原因就是找不到这个文件。

    正确操作如下:

    new-item 3.txt

    git add .

    git commit -m ‘...’

    mv 3.txt 33.txt

    git rm 3.txt

    git add 33.txt

      对比以上三条命令和git mv file_from file_to 是等同的。

      实际移动文件就是重命名文件,

    3. 查看功能

    3. 1 git status

      git status 打印文件状态(未追踪、已修改、已暂存)

      我们其实可以发现,我们做每一步的操作,git都给了我们命令提示。

      如果修改了文件内容。

      其实,我们也发现每一步的提示太多了,假若这里处理的文件很多,提示太长,那有没有简便地文件状态呢?

    3. 1. 1 git status -s

    git status -s = git status --short 简化文件状态打印内容

    3. 1. 1. 1 short状态码

    ?? 代表未追踪的文件 3.txt

    AM 代表添加到暂存区的且被修改但是未放入暂存区 0.txt

    A 代表添加到暂存区的 2.txt

      我们再看看其他状态:

      未追踪状态变为添加到暂存区

    修改3.txt内容

    代表添加到暂存区的且被修改但是未放入暂存区

    add后,代表添加到暂存区的

      提交后,就没有当前任何状态信息了。

    再修改3.txt内容

    状态:被修改但是未放入暂存区 (靠右边的M)

    add后,代表被修改后放入暂存区 (靠左边的M)

    再修改3.txt内容

    MM 修改后放入暂存区,并且又再次修改

    3. 1. 1. 2 扩展

      简化文件状态除了上图的还有其他的。

      手动删除0.txt

      D (靠右边) 代表delete,表示在工作区删除了0.txt

    git rm 0.txt

    D (靠左边) 代表delete,表示在仓库(包括工作区)删除了0.txt

    git mv 1.txt first/111.txt

    R (靠左边)代表重命名(移动文件)

    3. 1. 1. 3 状态码总结

    A: 你本地新增的文件(服务器上没有).

    C: 文件的一个新拷贝.

    D: 你本地删除的文件(服务器上还在).

    M: 文件的内容或者mode被修改了.

    R: 文件名被修改了。

    T: 文件的类型被修改了。

    U: 文件没有被合并(你需要完成合并才能进行提交)。

    X: 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)

    官网文档

    官网说明:(常用的小迪已经列出了,如果今后大家遇到奇葩的提示,再查看文档说明即可)

    Ignored files are not listed, unless --ignored option is in effect, in which case XY are !!.

    X Y Meaning ------------------------------------------------- [AMD] not updated M [ MD] updated in index A [ MD] added to index D deleted from index R [ MD] renamed in index C [ MD] copied in index [MARC] index and work tree matches [ MARC] M work tree changed since index [ MARC] D deleted in work tree [ D] R renamed in work tree [ D] C copied in work tree ------------------------------------------------- D D unmerged, both deleted A U unmerged, added by us U D unmerged, deleted by them U A unmerged, added by them D U unmerged, deleted by us A A unmerged, both added U U unmerged, both modified ------------------------------------------------- ? ? untracked ! ! ignored -------------------------------------------------

    3. 2 git diff

    git diff

      查看当前文件的修改(主要看工作区)

      新建一个diff.txt,提交暂存区,再修改其内容后,我们想查看它的变化记录。

    git diff

    有的朋友可能会出现乱码!注意:记事本保存应以utf-8方式保存!

    --- 代表之前提交到暂存区的内容。

    +++ 代表修改之后,未提交至暂存区的内容(在工作区)。

      将其添加至暂存区,在对比,发现没有记录了。是因为git diff只是比较工作目录与暂存、提交之间的差别,工作目录是关键。工作目录东西都提交,git就认为没有东西可对比了,执行git diff后,就看不到任何变化了。

      我们再修改文件!查看diff。

      我们再修改文件!

    diff --git a/diff.txt b/diff.txt

      该行显示git 版本的diff 下两个文件的对比。a版本(修改前)的文件 diff.txt,和 b版本(修改后)文件 diff.txt

    index 0e2f2d7..a19cbac 100644

      index后面两个数字表示两个文件的hash值(index区域的0e2f2d7对象与工作区域的a19cbac对象对比)

      最后面的数字表示文件的属性,权限(文件权限为644)

    @@ -1 +1,3 @@

    $ @@ -4,3 +4,5 @@   该行表示接下来,下面显示的内容所在位置。   -表示修改前,+表示修改后;-1表示修改前的diff.txt文件,从第1行开始显示,到第1行截止。

    如:-4,3 从第4行开始显示,一直 到第6行(上面的4为起始行,3为向后偏移的行数。即显示修改前该文件第4至第6行的内容)

      +1,3表示接下来要显示的内容为修改后的diff.txt文件,从第1行开始显示,一直到   第3行(从第1行开始,延续到向后偏移3行)。

    如:+4,5 则表示接下来要显示的内容为修改后的README.md文件,从第4行开始显示,一直到 第8行(从第4行开始,延续到向后偏移5行)

      提交后,同理diff也是打印不出东西的。

    3. 2. 1 git diff --staged

      查看暂存区和提交区域之间的差异

      再修改文件:

      假如提交到暂存区,我们想看暂存区与提交的对比记录。

    git diff --staged

    11111111111111111111111111111 第二次修改!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

      以上是之前提交的内容!

    -第三次改!

      以上是最新提交的内容。

    +第四次修改! +a +b +c

      以上是在暂存区的修改还没有提交。

    3. 3 git log 查看日志

      commit 68566241c1ac163e4e82f710009070648c1bdb00 提交后跟着的数字,实际上可以认为是id(唯一的),它就可以完全代表此次的commit提交了,它是通过git计算出来的,严格意义上应该称为校验和(或ssha-1),这里包含文件内容、名字整合出来的,它有40个字符。

      后面紧跟着作者和提交日期、记录。

      如果log很多的话,就进入了日志打印模式。可以看到最下面的:,是不能再输入命令的,按下q,即可退出到终端原界面。

    3. 3. 1 git log -p

      查看详细信息,加上之前git log打印的信息,还加上了diff的信息。

    3. 3. 2 git log -n

      查看最近的n条信息

    3. 3. 3 git log --stat

      列出所有被修改的文件,以及简略的统计信息

    3. 3. 4 git log --pretty

      设置打印内容的格式

    3. 3. 4. 1 -oneline 哈希和描述

      git log --pretty=oneline 打印哈希和描述

    3. 3. 4. 2 -short 哈希、作者、描述

    git log --pretty=short 打印哈希、作者、描述

    3. 3. 4. 3 -full 哈希、作者、提交者、描述

    git log --pretty=full 打印哈希、作者、提交者、描述

    此处的作者:实际修改的人

    提交者:最后将此工作成果提交到仓库的人

    注意作者和提交者不一定是同一个人!

    3. 3. 4. 4 -fuller 哈希、作者、日期、提交者、提交日期、描述

    git log --pretty=fuller 打印哈希、作者、日期、提交者、提交日期、描述

    3. 3. 4. 5 -format 定制要显示的记录格式
    选项说明%H提交对象(commit)的完整哈希字串%h提交对象的简短哈希字串%T树对象(tree)的完整哈希字串%t树对象的简短哈希字串%P父对象(parent)的完整哈希字串%p父对象的简短哈希字串%an作者(author)的名字
    转载请注明原文地址:https://ipadbbs.8miu.com/read-8217.html
    最新回复(0)