目录
[1. 工作区(Working Directory)](#1. 工作区(Working Directory))
[2. 暂存区(Staging Area / Index)](#2. 暂存区(Staging Area / Index))
[3. 版本库(Repository)](#3. 版本库(Repository))
(2)查看.git配置文件------千万不要手动修改,容易导致Git仓库报废!!!
[(3)查看 HEAD指针 和 commit ID(唯一哈希值)。](#(3)查看 HEAD指针 和 commit ID(唯一哈希值)。)
[(4)通过 commit ID 查找文件。](#(4)通过 commit ID 查找文件。)
[(1)通过 commit ID ,向老版本回退。](#(1)通过 commit ID ,向老版本回退。)
[(2)通过 commit ID, 向新版本回退。](#(2)通过 commit ID, 向新版本回退。)
[(3)通过 git reflog(本地日志)回退老版本。](#(3)通过 git reflog(本地日志)回退老版本。)
[(1)撤销工作区的代码,还没有 add](#(1)撤销工作区的代码,还没有 add)
[(2)工作区的代码已经 add ,但没有 commit](#(2)工作区的代码已经 add ,但没有 commit)
[(3)工作区的代码已经 add ,并且也 commit 了](#(3)工作区的代码已经 add ,并且也 commit 了)
[(1)使用 add + commit 分步骤删除](#(1)使用 add + commit 分步骤删除)
[(2)使用 git rm [文件名] + commit 分步骤删除](#(2)使用 git rm [文件名] + commit 分步骤删除)
一,Git的概述和安装
1,一个经典的问题
不知道你有没有遇到这样的情况:甲方让你出一份报告,你出了一份v1。甲方看了看,让你再改改,一直改到了v-123456......
"报告-v1"
"报告-v2"
"报告-v3"
"报告-确定版"
"报告-最终版"
"报告-究极进化版"
......
最后甲方看了N个版本,发现还是V1版最好。这时,你的报告经历了无数次修改,已经找不到V1版了,该怎么办呢?
2,如何解决--版本控制器--Git
为了能够管理这些不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是能让你了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是一个可以记录⼯程的每一次改动和版本迭代的一个管理系统,同时也方便多人协同作业。
目前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的文件,例如 doc、excel、dwg、dgn、rvt等等。对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项⽬中的源代码⽂件!
3,删除Git工具
[user@iZwz9eoohx59fs5a6ampomZ ~]$ sudo yum remove git -y
[sudo] password for user:
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package git.x86_64 0:1.8.3.1-25.el7_9 will be erased
--> Processing Dependency: git = 1.8.3.1-25.el7_9 for package: perl-Git-1.8.3.1-25.el7_9.noarch
--> Running transaction check
---> Package perl-Git.noarch 0:1.8.3.1-25.el7_9 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Removing:
git x86_64 1.8.3.1-25.el7_9 @updates 22 M
Removing for dependencies:
perl-Git noarch 1.8.3.1-25.el7_9 @updates 57 k
Transaction Summary
=============================================================================
Remove 1 Package (+1 Dependent package)
Installed size: 22 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Erasing : perl-Git-1.8.3.1-25.el7_9.noarch 1/2
Erasing : git-1.8.3.1-25.el7_9.x86_64 2/2
Verifying : git-1.8.3.1-25.el7_9.x86_64 1/2
Verifying : perl-Git-1.8.3.1-25.el7_9.noarch 2/2
Removed:
git.x86_64 0:1.8.3.1-25.el7_9
Dependency Removed:
perl-Git.noarch 0:1.8.3.1-25.el7_9
Complete!
[user@iZwz9eoohx59fs5a6ampomZ ~]$ git --version
-bash: /usr/bin/git: No such file or directory
4,安装Git工具
[user@iZwz9eoohx59fs5a6ampomZ ~]$ sudo yum install git -y
Loaded plugins: fastestmirror
Determining fastest mirrors
base | 3.6 kB 00:00
epel | 4.3 kB 00:00
extras | 2.9 kB 00:00
mysql-connectors-community | 3.0 kB 00:00
mysql-tools-community | 3.0 kB 00:00
mysql57-community | 2.6 kB 00:00
updates | 2.9 kB 00:00
Resolving Dependencies
--> Running transaction check
---> Package git.x86_64 0:1.8.3.1-25.el7_9 will be installed
--> Processing Dependency: perl-Git = 1.8.3.1-25.el7_9 for package: git-1.8.3.1-25.el7_9.x86_64
--> Processing Dependency: perl(Git) for package: git-1.8.3.1-25.el7_9.x86_64
--> Running transaction check
---> Package perl-Git.noarch 0:1.8.3.1-25.el7_9 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
git x86_64 1.8.3.1-25.el7_9 updates 4.4 M
Installing for dependencies:
perl-Git noarch 1.8.3.1-25.el7_9 updates 56 k
Transaction Summary
=============================================================================
Install 1 Package (+1 Dependent package)
Total download size: 4.5 M
Installed size: 22 M
Downloading packages:
(1/2): perl-Git-1.8.3.1-25.el7_9.noarch.rpm | 56 kB 00:00
(2/2): git-1.8.3.1-25.el7_9.x86_64.rpm | 4.4 MB 00:00
-----------------------------------------------------------------------------
Total 17 MB/s | 4.5 MB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : perl-Git-1.8.3.1-25.el7_9.noarch 1/2
Installing : git-1.8.3.1-25.el7_9.x86_64 2/2
Verifying : git-1.8.3.1-25.el7_9.x86_64 1/2
Verifying : perl-Git-1.8.3.1-25.el7_9.noarch 2/2
Installed:
git.x86_64 0:1.8.3.1-25.el7_9
Dependency Installed:
perl-Git.noarch 0:1.8.3.1-25.el7_9
Complete!
[user@iZwz9eoohx59fs5a6ampomZ ~]$ git --version
git version 1.8.3.1
二,创建和配置Git本地仓库
1,创建Git本地仓库
user@iZwz9eoohx59fs5a6ampomZ ~]$ ll
total 8
-rw-rw-r-- 1 user user 827 Jun 12 2025 install.sh
drwxrwxr-x 16 user user 4096 Nov 17 13:55 qaq
[user@iZwz9eoohx59fs5a6ampomZ ~]$ mkdir gitCode
[user@iZwz9eoohx59fs5a6ampomZ ~]$ ll
total 12
drwxrwxr-x 2 user user 4096 Dec 18 19:17 gitCode
-rw-rw-r-- 1 user user 827 Jun 12 2025 install.sh
drwxrwxr-x 16 user user 4096 Nov 17 13:55 qaq
[user@iZwz9eoohx59fs5a6ampomZ ~]$ cd gitCode
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git init
Initialized empty Git repository in /home/user/gitCode/.git/
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ls -ail
total 12
1444444 drwxrwxr-x 3 user user 4096 Dec 18 19:18 .
1445705 drwx------ 12 user user 4096 Dec 18 19:17 ..
1444470 drwxrwxr-x 7 user user 4096 Dec 18 19:18 .git
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ tree .git/
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── info
│ └── exclude
├── objects
│ ├── info
│ └── pack
└── refs
├── heads
└── tags
9 directories, 13 files
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$
2,配置Git本地仓库
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git config --global user.name "forest"
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git config --global user.email "169135@qq.com"
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git config -l
user.name=forest
user.email=169135@qq.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
3,修改Git本地仓库
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git config --global --unset user.name
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git config --global --unset user.emaile
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git config -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
三,Git的主体框架
可以把 Git 的这三个区域想象成你整理文件准备归档的过程,这样更容易理解:

1. 工作区(Working Directory)
- 定义:就是你电脑上能看到的、实际编辑文件的文件夹(项目目录),是你日常写代码、修改文件的地方。
- 类比:就像你的办公桌,文件散落在桌上,你可以随意修改、新增、删除。
- 特点:
-
- 所有修改只存在于本地文件系统,Git 不会自动追踪这里的变动;
- 只有通过
git add命令,才能把工作区的修改提交到下一个区域。
2. 暂存区(Staging Area / Index)
- 定义 :是 Git 中一个临时存储区域(本质是
.git/index文件),用来存放 "即将要提交到版本库的修改"。 - 类比:就像你办公桌上的 "待归档文件篮",你把要归档的文件先放进篮子里,确认没问题后再统一归档。
- 特点:
-
- 暂存区记录的是 "文件的修改状态",而非文件本身;
- 可以通过
git add把工作区的修改加入暂存区,也可以通过git reset把暂存区的修改撤回到工作区; - 暂存区的作用是让你 "按需提交"------ 比如你改了 5 个文件,只想提交其中 3 个,就可以只把这 3 个加到暂存区。
3. 版本库(Repository)
- 定义 :是 Git 的核心区域(对应项目目录下的
.git文件夹),存储了所有提交的版本记录、分支、标签等元数据,是 Git 真正管理版本的地方。 - 类比:就像公司的档案柜,一旦文件从 "待归档篮"(暂存区)放入档案柜,就会被永久保存(除非手动删除),并且有唯一的版本号标识。
- 特点:
-
- 只有通过
git commit命令,才能把暂存区的修改正式提交到版本库; - 提交后会生成一个唯一的 commit ID(哈希值),可以通过 ID 回溯任意版本。
- 只有通过
- 细分 :版本库又包含
HEAD(指向当前分支的最新提交)、分支(如master/main)、提交对象(commit)等。
四,添加/查看/修改/回退/撤销修改/删除文件
1,添加文件
(1)添加单个文件。
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ touch ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ls -ail
total 12
1444444 drwxrwxr-x 3 user user 4096 Dec 19 16:52 .
1445705 drwx------ 12 user user 4096 Dec 19 16:29 ..
1444470 drwxrwxr-x 7 user user 4096 Dec 19 16:28 .git
1450638 -rw-rw-r-- 1 user user 0 Dec 19 16:52 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ vim ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat ReadMe
hello git!
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git add .
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git commit -m "RM: add first file"
[master (root-commit) 30a3ede] RM: add first file
1 file changed, 1 insertion(+)
create mode 100644 ReadMe
(2)添加多个文件。
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ touch file1 file2 file3
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ls -ail
total 16
1444444 drwxrwxr-x 3 user user 4096 Dec 19 17:08 .
1445705 drwx------ 12 user user 4096 Dec 19 16:29 ..
1450655 -rw-rw-r-- 1 user user 0 Dec 19 17:08 file1
1450656 -rw-rw-r-- 1 user user 0 Dec 19 17:08 file2
1450657 -rw-rw-r-- 1 user user 0 Dec 19 17:08 file3
1444470 drwxrwxr-x 8 user user 4096 Dec 19 16:54 .git
1450638 -rw-rw-r-- 1 user user 11 Dec 19 16:53 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git add file1 file2 file3
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git commit -m "RM: add 3 files"
[master e7cf8e3] RM: add 3 files
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file1
create mode 100644 file2
create mode 100644 file3
(3)二次commit添加文件。
// 一次提交多个文件
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ touch file4
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git add file4
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ touch file5
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git add file5
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git commit -m "add file"
[master a2adce4] add file
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file4
create mode 100644 file5
// 多次提交一个文件
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ touch file6 file7
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git add file6
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git commit -m "add file6"
[master 3470c3e] add file6
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file6
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git add file7
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git commit -m "add file7"
[master c6c299a] add file7
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file7
2,查看文件
(1)查看commit提交记录。
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git log
commit e7cf8e3a8a5c7c947d7dbeb0455227f116b2364b
Author: forest <169135@qq.com>
Date: Fri Dec 19 17:11:16 2025 +0800
RM: add 3 files
commit 30a3ede6613907abef1af75edd40881ff27f1a18
Author: forest <169135@qq.com>
Date: Fri Dec 19 16:54:42 2025 +0800
RM: add first file
(2)查看.git配置文件------千万不要手动修改,容易导致Git仓库报废!!!
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ tree .git
.git
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── index
├── info
│ └── exclude
├── logs
│ ├── HEAD
│ └── refs
│ └── heads
│ └── master
├── objects
│ ├── 30
│ │ └── a3ede6613907abef1af75edd40881ff27f1a18
│ ├── a7
│ │ └── d340fc51407bbd26dd0f87f75d07f3cf882127
│ ├── d1
│ │ └── c64694584cf480b01273f2c729fd8b6b7c320c
│ ├── e4
│ │ └── 46ee785164a8a28e6c49dcf2491b0a3d3c767c
│ ├── e6
│ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│ ├── e7
│ │ └── cf8e3a8a5c7c947d7dbeb0455227f116b2364b
│ ├── info
│ └── pack
└── refs
├── heads
│ └── master
└── tags
18 directories, 24 files
(3)查看 HEAD指针 和 commit ID(唯一哈希值)。
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat .git/HEAD
ref: refs/heads/master
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat .git/refs/heads/master
e7cf8e3a8a5c7c947d7dbeb0455227f116b2364b
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git cat-file -p e7cf8e3a8a5c7c947d7dbeb0455227f116b2364b
tree a7d340fc51407bbd26dd0f87f75d07f3cf882127
parent 30a3ede6613907abef1af75edd40881ff27f1a18
author forest <877719135@qq.com> 1766135476 +0800
committer forest <877719135@qq.com> 1766135476 +0800
RM: add 3 files
(4)通过 commit ID 查找文件。
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git cat-file -p e7cf8e3a8a5c7c947d7dbeb0455227f116b2364b
tree a7d340fc51407bbd26dd0f87f75d07f3cf882127
parent 30a3ede6613907abef1af75edd40881ff27f1a18
author forest <169135@qq.com> 1766135476 +0800
committer forest <169135@qq.com> 1766135476 +0800
RM: add 3 files
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git cat-file -p a7d340fc51407bbd26dd0f87f75d07f3cf882127
100644 blob d1c64694584cf480b01273f2c729fd8b6b7c320c ReadMe
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file1
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file2
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file3
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git cat-file -p 30a3ede6613907abef1af75edd40881ff27f1a18
tree e446ee785164a8a28e6c49dcf2491b0a3d3c767c
author forest <169135@qq.com> 1766134482 +0800
committer forest <169135@qq.com> 1766134482 +0800
RM: add first file
3,修改文件
(1)理解修改文件
Git比其他版本控制系统设计得优秀,因为 Git 跟踪并管理的是修改,而非文件。
什么是修改?新增一行/更改一行/删除一行,甚至创建/删除文件都是修改。
(2)示例
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ls
file1 file2 file3 file4 file5 file6 file7 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ vim ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat ReadMe
hello git!
hello world!
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: ReadMe
#
no changes added to commit (use "git add" and/or "git commit -a")
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git diff ReadMe
diff --git a/ReadMe b/ReadMe
index d1c6469..4694510 100644
--- a/ReadMe
+++ b/ReadMe
@@ -1 +1,2 @@
hello git!
+hello world!
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git add ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: ReadMe
#
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git commit -m "modify ReadMe"
[master 9b0899a] modify ReadMe
1 file changed, 1 insertion(+)
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git status
# On branch master
nothing to commit, working directory clean
4,回退文件
(1)通过 commit ID ,向老版本回退。
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 0 Dec 19 17:08 file1
-rw-rw-r-- 1 user user 0 Dec 19 17:08 file2
-rw-rw-r-- 1 user user 0 Dec 19 17:08 file3
-rw-rw-r-- 1 user user 0 Dec 19 18:16 file4
-rw-rw-r-- 1 user user 0 Dec 19 18:16 file5
-rw-rw-r-- 1 user user 24 Dec 19 20:29 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat ReadMe
hello git!
hello world!
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git log --pretty=oneline
9b0899ac2777fc3e39ea561bb160f69658289eb5 modify ReadMe
c6c299ae63ce9cf04e009f30a6e300baff5c0c0c add file7
3470c3efa596493f68a9d0e71eac20ada15e81fe add file6
a2adce4c28566af47b7875a930c4768e999c50f5 add file
e7cf8e3a8a5c7c947d7dbeb0455227f116b2364b RM: add 3 files
30a3ede6613907abef1af75edd40881ff27f1a18 RM: add first file
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git reset --hard 30a3ede6613907abef1af75edd40881ff27f1a18
HEAD is now at 30a3ede RM: add first file
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 11 Dec 19 21:29 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat ReadMe
hello git!
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git log --pretty=oneline
30a3ede6613907abef1af75edd40881ff27f1a18 RM: add first file
(2)通过 commit ID, 向新版本回退。
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 11 Dec 19 21:29 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat ReadMe
hello git!
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git log --pretty=oneline
30a3ede6613907abef1af75edd40881ff27f1a18 RM: add first file
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git reset --hard 9b0899ac2777fc3e39ea561bb160f69658289eb5
HEAD is now at 9b0899a modify ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file1
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file2
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file3
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file5
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file6
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file7
-rw-rw-r-- 1 user user 24 Dec 19 21:37 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat ReadMe
hello git!
hello world!
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git log --pretty=oneline
9b0899ac2777fc3e39ea561bb160f69658289eb5 modify ReadMe
c6c299ae63ce9cf04e009f30a6e300baff5c0c0c add file7
3470c3efa596493f68a9d0e71eac20ada15e81fe add file6
a2adce4c28566af47b7875a930c4768e999c50f5 add file
e7cf8e3a8a5c7c947d7dbeb0455227f116b2364b RM: add 3 files
30a3ede6613907abef1af75edd40881ff27f1a18 RM: add first file
(3)通过 git reflog(本地日志)回退老版本。
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git reflog
9b0899a HEAD@{0}: reset: moving to 9b0899ac2777fc3e39ea561bb160f69658289eb5
30a3ede HEAD@{1}: reset: moving to 30a3ede6613907abef1af75edd40881ff27f1a18
9b0899a HEAD@{2}: commit: modify ReadMe
c6c299a HEAD@{3}: commit: add file7
3470c3e HEAD@{4}: commit: add file6
a2adce4 HEAD@{5}: commit: add file
e7cf8e3 HEAD@{6}: commit: RM: add 3 files
30a3ede HEAD@{7}: commit (initial): RM: add first file
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git reset --hard 9b0899a
HEAD is now at 9b0899a modify ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file1
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file2
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file3
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file5
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file6
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file7
-rw-rw-r-- 1 user user 24 Dec 19 21:37 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat ReadMe
hello git!
hello world!
5,撤销修改文件
撤销修改的目的是,不要影响远程仓库的代码,前提是不要push到远程仓库。

(1)撤销工作区的代码,还没有 add
使用 git checkout -- [文件名],撤销对文件的修改。
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file1
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file2
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file3
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file5
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file6
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file7
-rw-rw-r-- 1 user user 24 Dec 19 21:37 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ vim ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat ReadMe
hello git!
hello world!
xxx code
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git diff ReadMe
diff --git a/ReadMe b/ReadMe
index 4694510..151d62f 100644
--- a/ReadMe
+++ b/ReadMe
@@ -1,2 +1,3 @@
hello git!
hello world!
+xxx code
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git checkout -- ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat ReadMe
hello git!
hello world!
(2)工作区的代码已经 add ,但没有 commit
先使用 git reset HEAD [文件名],撤销add对暂存区的修改。
再使用 git checkout -- [文件名],撤销对文件的修改。
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file1
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file2
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file3
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file5
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file6
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file7
-rw-rw-r-- 1 user user 24 Dec 20 16:17 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ vim ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git add ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: ReadMe
#
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git reset HEAD ReadMe
Unstaged changes after reset:
M ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: ReadMe
#
no changes added to commit (use "git add" and/or "git commit -a")
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git checkout -- ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git status
# On branch master
nothing to commit, working directory clean
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ cat ReadMe
hello git!
hello world!
(3)工作区的代码已经 add ,并且也 commit 了
直接使用 git reset --hard HEAD^ 回退到上⼀个版本!
不过,这是有条件的,就是你还没有把本地版本库push推送到远程仓库。
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file1
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file2
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file3
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file5
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file6
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file7
-rw-rw-r-- 1 user user 24 Dec 20 16:34 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ vim ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git add ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git commit -m "modify ReadMe: xxx code"
[master 7013284] modify ReadMe: xxx code
1 file changed, 1 insertion(+)
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git reset --hard HEAD^
HEAD is now at 9b0899a modify ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git status
# On branch master
nothing to commit, working directory clean
6,删除文件
(1)使用 add + commit 分步骤删除
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file1
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file2
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file3
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file5
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file6
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file7
-rw-rw-r-- 1 user user 24 Dec 20 18:26 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ rm file5 file6 file7
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file1
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file2
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file3
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file4
-rw-rw-r-- 1 user user 24 Dec 20 18:26 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git add --all
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: file5
# deleted: file6
# deleted: file7
#
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git commit -m "RM: delete files"
[master 8f5b66e] RM: delete files
3 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 file5
delete mode 100644 file6
delete mode 100644 file7
(2)使用 git rm [文件名] + commit 分步骤删除
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file1
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file2
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file3
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file5
-rw-rw-r-- 1 user user 24 Dec 20 18:26 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git rm file4
rm 'file4'
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ ll
total 4
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file1
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file2
-rw-rw-r-- 1 user user 0 Dec 19 21:37 file3
-rw-rw-r-- 1 user user 24 Dec 20 18:26 ReadMe
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: file4
#
[user@iZwz9eoohx59fs5a6ampomZ gitCode]$ git commit -m "RM: delete file4"
[master 908b484] RM: delete file4
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 file4