Git是一款免费、开源的分布式版本控制系统,最初由Linux内核的创始人林纳斯·托瓦兹(Linus Torvalds)为了管理Linux内核开发而创建。所以在使用时,简单常用的linux系统操作指令是可以直接使用的。
以下是一些常用的Linux命令及其在Git工作流中的应用:
cd
(Change Directory):改变当前目录。在使用Git时,经常需要进入某个项目的目录。
cd my_project
ls
(List):列出当前目录下的文件和文件夹。可以用来查看仓库的内容。
ls
mkdir
(Make Directory):创建一个新的目录。例如,创建一个新的Git仓库目录。
mkdir new_repo
cd new_repo
rm
(Remove):删除文件或目录。在Git工作流中,可能需要删除某些文件。
rm old_file.txt
touch
:创建一个空文件或更新文件的时间戳。可以用来快速创建新文件以添加到Git仓库。
touch new_file.txt
cat
:连接并显示文件内容。可以用来查看文本文件的内容。
cat README.md
nano
或 vim
:文本编辑器,用于编辑文件内容。
nano file.txt
# 或者
vim file.txt
cp
(Copy):复制文件或目录。
cp source.txt destination.txt
mv
(Move):移动或重命名文件或目录。
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 config -l
如果你是第一回使用Git软件,需要告诉Git软件你的名称和邮箱,否则是无法将文件纳入到版本库中进行版本管理的。
这是因为在多人协作时,不同的用户可能对同一个文件进行操作,所以Git软件必须区分不同用户的操作,区分的方式就是名称和邮箱。
即使您只是在本地使用Git进行版本控制而不打算进行多人协作,配置用户名和邮箱也是必需的。
这是因为Git的设计初衷就是支持分布式协同工作,即使在单人项目中,记录提交者的信息也是一个良好的习惯。
所以是一定要配置的,否则就会出现如下提示:
要配置您的名称和邮箱,可以使用以下命令:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
–global 全局范围内配置的意思。
这将在全局范围内配置您的Git用户名和邮箱地址,以便在所有的Git仓库中都能使用这些信息。
首先通过指令进入到指定文件目录
执行指定的指令,创建文件版本库
git init
在版本库文件夹下手动创建文件。
通过软件的指令查看版本库状态
git status
我们发现新建的文件属于untracked files
(未追踪文件),这里表示当前的txt文件虽然放置到了版本库的文件目录中,被Git软件识别到了,但是未纳入到版本库管理中,所以属于未追踪文件。
通过这个现象可以认为,系统文件夹物理目录和版本库管理目录的含义是不一样的。
只有文件被纳入到版本库管理后,Git软件才能对文件修改后的不同版本内容进行追踪处理,也就是所谓的 tracked files
了。
那么如何将文件纳入到版本库的管理呢,这就需要我们执行以下命令了:
#这里的文件是需要提供扩展名的
git add yushifu.txt
执行结束后再次查看版本库状态:
在Git中,"cached file"状态指的是文件的暂存状态,也就是文件已经被添加到了Git的索引中,但还没有被提交到版本库中。
这意味着虽然文件的修改已经被记录下来,但还没有成为一个正式的提交,相当于一个临时草稿状态,随时可以进行修改或删除。
如果确定要把文件放置在版本库中,那么就需要执行确定提交指令。
# commit表示真正地纳入到版本库中
# -m 表示提交时的信息(message),是必须输入的。用于描述不同版本之间的差别信息
git commit -m "my first git file"
提交后,Git会对当前的操作进行Hash计算,通过计算后的值将数据保存下来。
提交的Hash计算:
当我们执行git commit
命令时,Git会对提交的内容进行一系列处理,包括计算该提交的唯一标识符(也称为SHA-1哈希值)。这个哈希值是一个40字符长的字符串,用来唯一标识这次提交。计算哈希值的过程涉及到提交信息、文件的内容以及其他相关元数据。
保存到对象目录:
提交成功后,Git会将所有对象(如文件快照、树对象和提交对象)存储在.git/objects
目录中。每个对象都以其SHA-1哈希值作为文件名进行存储。这种方式不仅确保对象的唯一性,还优化了存储空间,因为相同内容的对象只会存储一次。
查看提交详情:
可以通过多种命令查看提交的详细信息。常用的指令包括:
git show
:显示最近一次提交的详细信息,包括提交的哈希值、作者、日期、提交信息以及具体的文件变更内容。git log
:显示提交历史记录。你可以通过添加选项(如--oneline
, --graph
等)来调整输出格式。git diff
:显示工作目录与暂存区或两个提交之间的差异。git show
该命令会显示最近一次提交的详细信息,包括提交哈希值、作者信息、日期、提交信息以及变更的文件内容。提交信息头部:
commit 8ceae37d4ace73141961d7c0382746eddd6bdbce (HEAD -> master)
commit 8ceae37d4ace73141961d7c0382746eddd6bdbce
:这是这个提交的SHA-1哈希值,用来唯一标识这次提交。HEAD -> master
:HEAD
当前指向master
分支,意味着这是master
分支的最新提交。作者信息:
Author: yushifu
Author
:显示提交的作者和其电子邮件地址。这里表示是由yushifu
(邮箱是yushifu2000s@163.com
)创建的这个提交。日期和时间:
Date: Thu Jun 13 15:12:49 2024 +0800
Date
:显示提交的日期和时间,这里是2024年6月13日
,下午3点12分49秒
(+0800表示时区为东八区)。提交信息:
haha first git file
haha first git file
。文件变更信息:
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
是新文件内容的哈希值。git log
该命令会显示提交历史记录,每个提交点都会显示哈希值、作者、日期和提交信息。在txt文件中增加一些内容
修改后,Git版本库中的文件和本地的文件就有了不同。我们可以查看状态:
当前分支:
On branch master
master
分支上。未暂存的修改:
Changes not staged for commit:
git add
命令添加到暂存区(staging area)的文件。提示信息:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
git add
命令来将文件的修改添加到暂存区,以便在下次提交中包含这些修改。git restore
命令来撤销对工作目录中文件的修改,使其恢复到最后一次提交时的状态。修改的文件列表:
modified: yushifu.txt
总结:
no changes added to commit (use "git add" and/or "git commit -a")
git commit
,不会有任何修改被提交。modified表示文件已经修改了,我们可以把这一次的修改提交到版本库中。
原则上来讲,这里的操作顺序依然应该是
# 先增加,再提交
git add test.txt
git commit
也可以简化一下操作
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
yushifu
Thu Jun 13 15:42:04 2024 +0800
update file
文件改动部分:
yushifu.txt
文件,新增了一行内容 yushifu
。\ No newline at end of file
)。版本库中的文件我们已经修改并提交了,那么文件的版本信息就会发生变化,那我们如何来查看这个变化呢?这里我们可以采用log指令进行查看。
git log
通过查看你的 git log
输出,可以看到在 master
分支上的提交历史。它显示了最近两个提交的信息:
最近的提交
commit cc50c43a7582d75acc53fd1e2f3dfc1f5b1b4b4e (HEAD -> master)
Author: yushifu
Date: Thu Jun 13 15:42:04 2024 +0800
update file
cc50c43a7582d75acc53fd1e2f3dfc1f5b1b4b4e
update file
上一个提交
commit 8ceae37d4ace73141961d7c0382746eddd6bdbce
Author: yushifu
Date: Thu Jun 13 15:12:49 2024 +0800
haha first git file
8ceae37d4ace73141961d7c0382746eddd6bdbce
haha first git file
如果感觉看着不舒服,也可以美化一下显示方式:
git log --pretty=oneline
也可以使用简单方式查看
git log --oneline
删除目录里的文件
查看Git版本库状态
此时Git软件会识别出来,版本库中有一份文件和当前用于临时操作文件的暂存区内的文件状态不一致:版本库中文件还在,但是操作区内的文件已经没有了。
所以软件提供了两个选择:一个是将版本库中的文件也进行(提交)删除操作。另外一个就是从版本库中恢复文件。
使用指令从版本库中恢复文件
git restore yushifu.txt
如果想要真正删除文件,那么也要将版本库中同时删除。
查看日志
在 Git 中,文件删除也是一种变更操作,并且所有的变更都会被记录在版本历史中。因此,即使文件在最新的提交中被删除了,我们仍然可以通过回溯到之前的版本来恢复该文件。
查看版本库信息
将版本库文件重置到某一个版本
# 这里的cc50c43就是版本Hash值,用于唯一确定版本库中此版本的标记
# 如果不记得具体的版本值,版本值也可以使用HEAD值,比如最新的上一个版本:HEAD^
# 如果后退更多的版本,可以使用 HEAD~N
git reset --hard cc50c43
被删除的文件又回来了。
本文仅供学习使用!