Git基础指令(图文详解)

目录

Git概述

Git基础指令

Linux系统操作指令

Git是一款免费、开源的分布式版本控制系统,最初由Linux内核的创始人林纳斯·托瓦兹(Linus Torvalds)为了管理Linux内核开发而创建。所以在使用时,简单常用的linux系统操作指令是可以直接使用的。

以下是一些常用的Linux命令及其在Git工作流中的应用:

  1. cd (Change Directory):改变当前目录。在使用Git时,经常需要进入某个项目的目录。

    sh 复制代码
    cd my_project
  2. ls (List):列出当前目录下的文件和文件夹。可以用来查看仓库的内容。

    sh 复制代码
    ls
  3. mkdir (Make Directory):创建一个新的目录。例如,创建一个新的Git仓库目录。

    sh 复制代码
    mkdir new_repo
    cd new_repo
  4. rm (Remove):删除文件或目录。在Git工作流中,可能需要删除某些文件。

    sh 复制代码
    rm old_file.txt
  5. touch:创建一个空文件或更新文件的时间戳。可以用来快速创建新文件以添加到Git仓库。

    sh 复制代码
    touch new_file.txt
  6. cat:连接并显示文件内容。可以用来查看文本文件的内容。

    sh 复制代码
    cat README.md
  7. nanovim:文本编辑器,用于编辑文件内容。

    sh 复制代码
    nano file.txt
    # 或者
    vim file.txt
  8. cp (Copy):复制文件或目录。

    sh 复制代码
    cp source.txt destination.txt
  9. mv (Move):移动或重命名文件或目录。

    sh 复制代码
    mv old_name.txt new_name.txt
指令 含义 说明
cd 目录 change directory 改变操作目录
cd .. 退回到上一级目录
pwd Print work directory 打印工作目录
ls list directory contents 显示当前目录的文件及子文件目录
ll ls -l 简化版本 更详细地显示当前目录的文件及子文件目录
mkdir 文件夹名称 make directory 新建一个文件夹
rm 文件 remove 删除文件
rm -r 文件夹 Remove 删除文件目录
touch 文件 如果创建的文件不存在,那么创建一个空文件
reset 清屏
clear 清屏
exit 退出终端窗口

Git软件指令

1.配置信息

默认情况下,我们可以通过指令获取软件的配置信息:

bash 复制代码
git config -l

2.名称和邮箱

  • 如果你是第一回使用Git软件,需要告诉Git软件你的名称和邮箱,否则是无法将文件纳入到版本库中进行版本管理的。

  • 这是因为在多人协作时,不同的用户可能对同一个文件进行操作,所以Git软件必须区分不同用户的操作,区分的方式就是名称和邮箱。

  • 即使您只是在本地使用Git进行版本控制而不打算进行多人协作,配置用户名和邮箱也是必需的。

  • 这是因为Git的设计初衷就是支持分布式协同工作,即使在单人项目中,记录提交者的信息也是一个良好的习惯。

  • 所以是一定要配置的,否则就会出现如下提示:

要配置您的名称和邮箱,可以使用以下命令:

bash 复制代码
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

--global 全局范围内配置的意思。

这将在全局范围内配置您的Git用户名和邮箱地址,以便在所有的Git仓库中都能使用这些信息。


3.初始化版本库

  • Git软件主要用于管理文件的版本信息,但它只是一个软件,不可能安装后就直接将系统中所有的文件全部纳入到它的管理范畴中。
  • 并且,软件管理版本信息的主要目就是管理文件的修改和变更,如果将系统中所有文件都进行管理其实意义是不大的。
  • 所以一般情况下,我们需要指定某一个文件目录作为软件的管理目录。
  • 因为这个目录主要就作为Git软件的管理文件的版本变化信息,所以这个目录也称之为Git软件的版本仓库目录。

首先通过指令进入到指定文件目录

执行指定的指令,创建文件版本库

bash 复制代码
git init

4.向版本库中添加文件

在版本库文件夹下手动创建文件。

通过软件的指令查看版本库状态

bash 复制代码
git status
  • 我们发现新建的文件属于untracked files(未追踪文件),这里表示当前的txt文件虽然放置到了版本库的文件目录中,被Git软件识别到了,但是未纳入到版本库管理中,所以属于未追踪文件。

  • 通过这个现象可以认为,系统文件夹物理目录和版本库管理目录的含义是不一样的。

  • 只有文件被纳入到版本库管理后,Git软件才能对文件修改后的不同版本内容进行追踪处理,也就是所谓的 tracked files了。

  • 那么如何将文件纳入到版本库的管理呢,这就需要我们执行以下命令了:

bash 复制代码
#这里的文件是需要提供扩展名的
git add yushifu.txt

执行结束后再次查看版本库状态:

  • 在Git中,"cached file"状态指的是文件的暂存状态,也就是文件已经被添加到了Git的索引中,但还没有被提交到版本库中。

  • 这意味着虽然文件的修改已经被记录下来,但还没有成为一个正式的提交,相当于一个临时草稿状态,随时可以进行修改或删除。

  • 如果确定要把文件放置在版本库中,那么就需要执行确定提交指令。

bash 复制代码
# commit表示真正地纳入到版本库中
# -m 表示提交时的信息(message),是必须输入的。用于描述不同版本之间的差别信息
git commit -m "my first git file"

提交后,Git会对当前的操作进行Hash计算,通过计算后的值将数据保存下来。

  1. 提交的Hash计算

    当我们执行git commit命令时,Git会对提交的内容进行一系列处理,包括计算该提交的唯一标识符(也称为SHA-1哈希值)。这个哈希值是一个40字符长的字符串,用来唯一标识这次提交。计算哈希值的过程涉及到提交信息、文件的内容以及其他相关元数据。

  2. 保存到对象目录

    提交成功后,Git会将所有对象(如文件快照、树对象和提交对象)存储在.git/objects目录中。每个对象都以其SHA-1哈希值作为文件名进行存储。这种方式不仅确保对象的唯一性,还优化了存储空间,因为相同内容的对象只会存储一次。

  3. 查看提交详情

    可以通过多种命令查看提交的详细信息。常用的指令包括:

    • git show:显示最近一次提交的详细信息,包括提交的哈希值、作者、日期、提交信息以及具体的文件变更内容。
    • git log:显示提交历史记录。你可以通过添加选项(如--oneline, --graph等)来调整输出格式。
    • git diff:显示工作目录与暂存区或两个提交之间的差异。
  • 查看最近一次提交:

    sh 复制代码
    git show

    该命令会显示最近一次提交的详细信息,包括提交哈希值、作者信息、日期、提交信息以及变更的文件内容。

  1. 提交信息头部

    复制代码
    commit 8ceae37d4ace73141961d7c0382746eddd6bdbce (HEAD -> master)
    • commit 8ceae37d4ace73141961d7c0382746eddd6bdbce:这是这个提交的SHA-1哈希值,用来唯一标识这次提交。
    • HEAD -> masterHEAD当前指向master分支,意味着这是master分支的最新提交。
  2. 作者信息

    复制代码
    Author: yushifu <yushifu2000s@163.com>
    • Author:显示提交的作者和其电子邮件地址。这里表示是由yushifu(邮箱是yushifu2000s@163.com)创建的这个提交。
  3. 日期和时间

    复制代码
    Date:   Thu Jun 13 15:12:49 2024 +0800
    • Date:显示提交的日期和时间,这里是2024年6月13日,下午3点12分49秒(+0800表示时区为东八区)。
  4. 提交信息

    复制代码
        haha first git file
    • 这个部分是提交时输入的消息(commit message),在这次提交中,消息是haha first git file
  5. 文件变更信息

    复制代码
    diff --git a/yushifu.txt b/yushifu.txt
    new file mode 100644
    index 0000000..e69de29
    • diff --git a/yushifu.txt b/yushifu.txt:表示对比的文件是yushifu.txt,文件在提交前后都存在。
    • new file mode 100644:表示这是一个新文件,权限为100644(普通文件,读写权限)。
    • index 0000000..e69de29:表示文件内容的哈希值变化,0000000是因为文件在提交之前不存在,所以没有原始哈希值,e69de29是新文件内容的哈希值。

  • 查看提交历史:

    sh 复制代码
    git log

    该命令会显示提交历史记录,每个提交点都会显示哈希值、作者、日期和提交信息。


5.修改版本库文件

在txt文件中增加一些内容

修改后,Git版本库中的文件和本地的文件就有了不同。我们可以查看状态:

  1. 当前分支

    复制代码
    On branch master
    • 说明你当前在 master 分支上。
  2. 未暂存的修改

    复制代码
    Changes not staged for commit:
    • 这个部分列出了你已经修改但还没有使用 git add 命令添加到暂存区(staging area)的文件。
  3. 提示信息

    复制代码
    (use "git add <file>..." to update what will be committed)
    (use "git restore <file>..." to discard changes in working directory)
    • 提示你可以使用 git add <file> 命令来将文件的修改添加到暂存区,以便在下次提交中包含这些修改。
    • 或者,你可以使用 git restore <file> 命令来撤销对工作目录中文件的修改,使其恢复到最后一次提交时的状态。
  4. 修改的文件列表

    复制代码
    modified:   yushifu.txt
    • 列出了具体被修改但没有暂存的文件。
  5. 总结

    复制代码
    no changes added to commit (use "git add" and/or "git commit -a")
    • 表示当前没有任何变化被添加到暂存区,也就是说,如果现在执行 git commit,不会有任何修改被提交。

modified表示文件已经修改了,我们可以把这一次的修改提交到版本库中。

原则上来讲,这里的操作顺序依然应该是

bash 复制代码
# 先增加,再提交
git add test.txt

git commit

也可以简化一下操作

bash 复制代码
git commit -a -m "update file"

指令操作中多了一个-a的参数,等同于将增加,提交两步操作融合成了一步


git commit -a -m "update file"

  • 这个命令同时暂存(stage)和提交(commit)所有被修改过且已被 Git 跟踪的文件。
  • 使用 -a 选项,Git 会自动将所有已跟踪的文件添加到暂存区,然后进行一次提交。
  • -m "update file" 选项指定了提交信息为 "update file"。

输出如下:

复制代码
[master cc50c43] update file
 1 file changed, 1 insertion(+)

说明你在 master 分支上创建了一个新的提交,提交哈希值为 cc50c43,并且 yushifu.txt 文件有一个插入的行。

查看当前Git软件库

git show

  • 提交哈希:cc50c43a7582d75acc53fd1e2f3dfc1f5b1b4b4e
  • Author:作者信息是 yushifu <yushifu2000s@163.com>
  • 提交日期:Thu Jun 13 15:42:04 2024 +0800
  • 提交信息: update file

文件改动部分:

  • 修改了 yushifu.txt 文件,新增了一行内容 yushifu
  • 注意:该文件最后没有新行(\ No newline at end of file)。

6. 查看版本库文件历史

版本库中的文件我们已经修改并提交了,那么文件的版本信息就会发生变化,那我们如何来查看这个变化呢?这里我们可以采用log指令进行查看。

bash 复制代码
git log

通过查看你的 git log 输出,可以看到在 master 分支上的提交历史。它显示了最近两个提交的信息:

  1. 最近的提交

    复制代码
    commit cc50c43a7582d75acc53fd1e2f3dfc1f5b1b4b4e (HEAD -> master)
    Author: yushifu <yushifu2000s@163.com>
    Date:   Thu Jun 13 15:42:04 2024 +0800
    
        update file
    • 提交哈希 : cc50c43a7582d75acc53fd1e2f3dfc1f5b1b4b4e
    • 作者 : yushifu yushifu2000s@163.com
    • 日期: 2024年6月13日 15:42:04 (北京时间)
    • 提交信息 : update file
  2. 上一个提交

    复制代码
    commit 8ceae37d4ace73141961d7c0382746eddd6bdbce
    Author: yushifu <yushifu2000s@163.com>
    Date:   Thu Jun 13 15:12:49 2024 +0800
    
        haha first git file
    • 提交哈希 : 8ceae37d4ace73141961d7c0382746eddd6bdbce
    • 作者 : yushifu yushifu2000s@163.com
    • 日期: 2024年6月13日 15:12:49 (北京时间)
    • 提交信息 : haha first git file

如果感觉看着不舒服,也可以美化一下显示方式:

bash 复制代码
git log --pretty=oneline

也可以使用简单方式查看

bash 复制代码
git log --oneline

7.删除文件

  • 一般情况下,Git软件就是用于管理文件的版本变更,但是在一些特殊的场景中,文件可能作废或不再使用,那么就需要从版本库中删除。
  • 这里说的并不是从物理文件目录中删除,而是从版本库中删除。

删除目录里的文件

查看Git版本库状态

  • 此时Git软件会识别出来,版本库中有一份文件和当前用于临时操作文件的暂存区内的文件状态不一致:版本库中文件还在,但是操作区内的文件已经没有了。

  • 所以软件提供了两个选择:一个是将版本库中的文件也进行(提交)删除操作。另外一个就是从版本库中恢复文件。

使用指令从版本库中恢复文件

bash 复制代码
git restore yushifu.txt

如果想要真正删除文件,那么也要将版本库中同时删除。

查看日志


8.恢复历史文件

在 Git 中,文件删除也是一种变更操作,并且所有的变更都会被记录在版本历史中。因此,即使文件在最新的提交中被删除了,我们仍然可以通过回溯到之前的版本来恢复该文件。

查看版本库信息

将版本库文件重置到某一个版本

bash 复制代码
# 这里的cc50c43就是版本Hash值,用于唯一确定版本库中此版本的标记

# 如果不记得具体的版本值,版本值也可以使用HEAD值,比如最新的上一个版本:HEAD^

# 如果后退更多的版本,可以使用 HEAD~N

git reset --hard cc50c43

被删除的文件又回来了。


本文仅供学习使用!

相关推荐
高山莫衣5 小时前
git rebase多次触发冲突
大数据·git·elasticsearch
码农藏经阁5 小时前
工作中常用的Git操作命令(一)
git
kobe_OKOK_5 小时前
【团队开发】git 操作流程
git·elasticsearch·团队开发
码农垦荒笔记5 小时前
Git 安装闭坑指南(仅 Windows 环境)
windows·git
CC码码15 小时前
管理你的多个 Git 密钥(多平台多账号)
git·gitlab·github
CC码码15 小时前
管理你的多个 Git 密钥(单平台多账号)
git·gitlab·github
大卫小东(Sheldon)15 小时前
GIM 1.5发布了! 支持Windows系统了
git·ai·rust
flying jiang15 小时前
将大仓库拆分为多个小仓库
git
李boyang10 天前
Git(四):远程操作
git
荻野泽溪10 天前
Git新建分支并同步到远程
git