版本管理¶
1.查看仓库当前状态¶
- 如果你修改了添加到暂存区的文件,可以使用
git status命令,查看仓库当前的状态
$ git status
On branch master # 表示你当前在 master 分支上工作
Changes not staged for commit: # 下面列出当前工作目录中,已修改、但尚未暂存(stage)的文件
# 告诉你如何将文件添加到暂存区,以便下次提交(commit)
(use "git add <file>..." to update what will be committed)
# 告诉你如何撤销对文件的修改,使其回到最近一次提交的状态
(use "git restore <file>..." to discard changes in working directory)
modified: test.txt
# 表示 test.txt 文件已被修改,但这些修改还没有被暂存(add)
# 表示没有暂存的文件可以提交
no changes added to commit (use "git add" and/or "git commit -a")
# 告诉你可以使用 git add 来暂存文件,或者使用 git commit -a 来提交所有已暂存和未暂存的修改
2.查看具体修改了什么内容¶
1.虽然Git告诉我们test.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的
- 使用
git diff这个命令来查看
$ git diff
# 下面信息表示 Git 正在比较 test.txt 文件的两个版本。a/ 表示旧版本,b/ 表示新版本
diff --git a/test.txt b/test.txt
# 显示了文件的索引哈希值,从 10b1e36 变更为 63c32f9。100644 是文件的权限模式,表示这是一个普通文件
index 10b1e36..63c32f9 100644
# 下面两行分别表示旧版本和新版本的文件路径
--- a/test.txt
+++ b/test.txt
# 这一行是 diff 的 "hunk" 头,它告诉你接下来的差异是在文件的哪个部分
# @@ 后面的数字表示旧文件中,差异行的起始和结束行号,以及新文件中,差异行的起始和结束行号
# 在这个例子中,差异发生在第1行到第3行
@@ -1,3 +1,3 @@
aaaa # 这一行在两个版本中都存在,没有变化
aaaa
-aaa # 这一行以 - 开头,表示这一行在旧版本中存在,但在新版本中被删除了
+aaaaaaaaaaa # 这一行以 + 开头,表示这一行在新版本中被添加了,而在旧版本中不存在
2.当知道对test.txt作了什么修改后,再把它提交到仓库就放心多了
# 1.将文件添加到暂存区
git add test.txt # 没有任何返回,说明添加成功
# 2.看一看仓库状态
git status
On branch master
Changes to be committed: # 这一行下面开始,列出当前已暂存(add),准备提交(commit)的文件
(use "git restore --staged <file>..." to unstage)
modified: test.txt
# 表示 test.txt 文件已被修改,并且修改已经被暂存,准备在下次提交时包含在内
# 3.提交修改
git commit -m "add somethings"
[master 912f330] add somethings
1 file changed, 1 insertion(+), 1 deletion(-)
# 4.提交后,再看看仓库的当前状态
git status
On branch master
nothing to commit, working tree clean # 当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的
3.查看历史提交记录¶
1.在实际工作中,我们脑子里不可能记得一个几千行的文件每次都改了什么内容
- 所以在Git中,我们可以使用
git log命令,查看文件提交的历史记录
$ git log
commit 65458a48e3605c91e785984f627cafab0c8aa302 (HEAD -> master)
# 这是最新提交,提交的哈希值是 65458a48e3605c91e785984f627cafab0c8aa302 【版本号】
# (HEAD -> master) 表示当前的 HEAD 指针指向 master 分支
# 即 当前提交是 master 分支的最新提交(最新提交都在上面)
Author: wangshangjian <wangshangjian@webmail.hzau.edu.cn>
Date: Sat Sep 14 21:00:43 2024 +0800
add two somethings # 提交时的描述信息,描述了这次提交的内容
commit 912f330c6e70f7699b6caa7bf48afc04e0912da5
Author: wangshangjian <wangshangjian@webmail.hzau.edu.cn>
Date: Sat Sep 14 20:58:29 2024 +0800
add somethings
commit 3dc02bc88f232b4856779e49fdde90a601f6a191
Author: wangshangjian <wangshangjian@webmail.hzau.edu.cn>
Date: Sat Sep 14 20:36:42 2024 +0800
wrote a readme file
2.如果嫌输出信息太多,可以加上--pretty=oneline参数
$ git log --pretty=oneline
65458a48e3605c91e785984f627cafab0c8aa302 (HEAD -> master) add somethings
912f330c6e70f7699b6caa7bf48afc04e0912da5 add somethings
3dc02bc88f232b4856779e49fdde90a601f6a191 wrote a readme file
3.实际上,每提交一个新版本,Git就会把它们自动串成一条时间线
- 如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线
4.版本回退¶
1.版本回退的前提,是Git必须知道当前版本是哪个版本
- 在Git中,用
HEAD表示当前版本 - 上一个版本就是
HEAD^ - 上上一个版本就是
HEAD^^ - 当然往上100个版本写100个
^比较容易数不过来,所以写成HEAD~100
2.现在,我们要把当前版本,回退到上一个版本,就可以使用git reset命令
$ git reset --hard HEAD^
HEAD is now at 912f330 add somethings # 回退成功
# --hard参数, 会回退到上个版本的已提交状态(commit)
# --soft参数, 会回退到上个版本的未提交状态
# --mixed参数,会回退到上个版本已添加但未提交的状态(add但未commit)
# 一般使用--hard就足够了
3.看看当前的历史版本库
- 可以看到,已经回退成功了
$ git log
commit 912f330c6e70f7699b6caa7bf48afc04e0912da5 (HEAD -> master)
Author: wangshangjian <wangshangjian@webmail.hzau.edu.cn>
Date: Sat Sep 14 20:58:29 2024 +0800
add somethings
commit 3dc02bc88f232b4856779e49fdde90a601f6a191
Author: wangshangjian <wangshangjian@webmail.hzau.edu.cn>
Date: Sat Sep 14 20:36:42 2024 +0800
wrote a readme file
4.如果想回到,回退前的版本(即回到未来),就使用commit id(前提是你还记得)
$ git reset --hard 65458a # 版本号写前几位就行了
HEAD is now at 65458a4 add two somethings # 回退成功!
5.如果记不住了commit id肿么办?Git提供了一个命令git reflog,用来记录你的每一次命令 - 可以用它获得commit id
$ git reflog
65458a4 (HEAD -> master) HEAD@{0}: reset: moving to 65458a
912f330 HEAD@{1}: reset: moving to HEAD^
65458a4 (HEAD -> master) HEAD@{2}: commit: add two somethings
912f330 HEAD@{3}: commit: add somethings
3dc02bc HEAD@{4}: commit (initial): wrote a readme file
本站总访问量 次
Authors: