git基本操作
一、git全局配置
一般在新的系统上,我都需要配置自己的git工作环境,配置工作只需进行一次,以后升级时还会沿用现在的配置,如果需要,以后可以用相同的命令修改已有的配置
# 配置全局用户名
[root@docker workspace]# git config --global user.name "qq"
# 配置全局用户邮箱
[root@docker workspace]# git config --global user.email "qq@email.com"
# 查看git配置
[root@docker workspace]# git config --list
user.email=qq@email.com
user.name=qq
[root@docker workspace]# git config user.name
qq
[root@docker workspace]# git config user.email
qq@email.com
二、创建一个版本库
# 创建一个目录
[root@docker workspace]# mkdir appA
[root@docker workspace]# ls
appA
[root@docker workspace]# cd appA/
# 在目录里面初始化操作
[root@docker appA]# git init
Initialized empty Git repository in /root/workspace/appA/.git/
# 会出现.git目录,所有git需要的数据和资源都存放在这个目录中
[root@docker appA]# ls -a
. .. .git
三、git常用操作
-
在工作目录所有文件都是2种状态,已跟踪或未跟踪
-
已跟踪的文件,在git仓库里面,状态可能是修改,暂存,未更新
-
未跟踪的文件,就是在工作目录下面新创建的文件,不在这个git仓库里面
-
-
对某些文件进行编辑后,git将这些文件标记为已修改,将此添加到暂存区,一次一次的添加,如此重复,提交到仓库里面

1、版本提交和版本回退
1、版本提交
创建一个文件
[root@docker appA]# echo 123 > code.txt
提交一个版本
[root@docker appA]# git add code.txt
[root@docker appA]# git commit -m "first c"
[master (root-commit) ae68b82] first c
1 file changed, 1 insertion(+)
create mode 100644 code.txt
查看版本记录
[root@docker appA]# git log
commit ae68b82720be107af80f3cdbdc71b9dd69b7cc51 (HEAD -> master)
Author: qq <qq@email.com>
Date: Thu Apr 9 15:17:10 2026 +0800
first c
2、版本回退
再次提交一个版本
# 添加一个新的内容
[root@docker appA]# cat code.txt
123
2commit
# 再次提交
[root@docker appA]# git add .
[root@docker appA]# git commit -m "second commit"
# 查看历史信息
[root@docker appA]# git log
commit 6deb1a0c96806c45c52dea40e7cd81bf733373cd (HEAD -> master)
Author: qq <qq@email.com>
Date: Thu Apr 9 15:20:48 2026 +0800
second commit # 第二次提交
commit ae68b82720be107af80f3cdbdc71b9dd69b7cc51
Author: qq <qq@email.com>
Date: Thu Apr 9 15:17:10 2026 +0800
first c # 第一次提交
现在想要回退到上一个版本
[root@docker appA]# git reset --hard HEAD^
HEAD is now at ae68b82 first c
# 查看历史信息,发现只有第一次提交的信息,回退成功了
[root@docker appA]# git log
commit ae68b82720be107af80f3cdbdc71b9dd69b7cc51 (HEAD -> master)
Author: qq <qq@email.com>
Date: Thu Apr 9 15:17:10 2026 +0800
first c
# 查看第一次提交时的文件
[root@docker appA]# cat code.txt
123
HEAD 表示当前最新的版本,HEAD表示当前版本的上一个版本,^表示当前版本的上上个版本,也可以使用HEAD1表示当前版本的前一个版本,HEAD100表示当前版本的前100个版本
假如这个时候,需要回到第二次提交的版本
# 能看到所有操作历史,包括reset丢失的版本
root@docker appA]# git reflog
ae68b82 (HEAD -> master) HEAD@{0}: reset: moving to HEAD
ae68b82 (HEAD -> master) HEAD@{1}: reset: moving to HEAD
ae68b82 (HEAD -> master) HEAD@{2}: reset: moving to HEAD^
6deb1a0 HEAD@{3}: commit: second commit
ae68b82 (HEAD -> master) HEAD@{4}: commit (initial): first c
# 回到第二个版本,--hard强制回退
[root@docker appA]# git reset --hard 6deb1a0
HEAD is now at 6deb1a0 second commit
# 查看版本信息,有第二次提交的信息了,回到了最新的版本了
[root@docker appA]# git log
commit 6deb1a0c96806c45c52dea40e7cd81bf733373cd (HEAD -> master)
Author: qq <qq@email.com>
Date: Thu Apr 9 15:20:48 2026 +0800
second commit
commit ae68b82720be107af80f3cdbdc71b9dd69b7cc51
Author: qq <qq@email.com>
Date: Thu Apr 9 15:17:10 2026 +0800
first c
# 查看内容
[root@docker appA]# cat code.txt
123
2commit
2、工作区,暂存区和版本库
1、工作区和暂存区
-
工作区,就是一个目录,可见的文件
-
暂存区就是将目录下的文件,git add 添加到暂存区里面了
2、版本库
-
隐藏目录.git 是git的版本库,里面存放了很多的东西
-
因为我们创建git版本库时,git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改
-
可以简单理解为,需要提交的文件修改全部放到暂存区,然后,一次性提交暂存区的所有修改

-
将文件往git仓库里面添加的时候,分2步执行的
-
第一步git add 添加到暂存区
-
第二步git commit 将暂存区的所有内容,提交到当前分支
-
再次创建一个文件
[root@docker appA]# echo 111 > code2.txt
使用git status查看当前版本文件的状态,几乎每次都需要使用查看
查看当前工作区和暂存区的文件状态
[root@docker appA]# git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
code2.txt
nothing added to commit but untracked files present (use "git add" to track)
上面表示code2.txt没有被跟踪,没有被git控制
将code2.txt加入到暂存区
[root@docker appA]# git add code2.txt
# 添加到暂存区了,新文件
[root@docker appA]# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: code2.txt
然后,执行git commit就可以将暂存区文件提交到分支,创建一个版本
[root@docker appA]# git commit -m "code2"
[master d48cf26] code2
1 file changed, 1 insertion(+)
create mode 100644 code2.txt
提交后,再次查看工作区,就是干净的
[root@docker appA]# git status
On branch master
nothing to commit, working tree clean

3、管理文件修改(非常重要的)
1、撤销工作区
- 工作区修改文件,怎么撤销了
# 工作区修改了文件
[root@docker appA]# echo 222 >>qq.ttx
# git检测到文件被修改了,还没有添加到暂存区
[root@docker appA]# git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: qq.ttx
# 直接撤销操作
[root@docker appA]# git restore qq.ttx
# 查看 git信息
[root@docker appA]# git status
On branch master
nothing to commit, working tree clean
# 发现撤销了
[root@docker appA]# cat qq.ttx
11
2、撤销暂存区
- 修改了文件,提交到暂存区怎么撤销
# 修改内容
[root@docker appA]# echo 22 >> qq.ttx
# 添加到暂存区
[root@docker appA]# git add qq.ttx
# 查看git状态
[root@docker appA]# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: qq.ttx
# 从暂存区撤销
[root@docker appA]# git reset HEAD qq.ttx
Unstaged changes after reset:
M qq.ttx
# 再次查看git状态,发现没有被添加到暂存区,成功从暂存区撤销了
[root@docker appA]# git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: qq.ttx
no changes added to commit (use "git add" and/or "git commit -a")
# 执行撤销工作区的修改即可
[root@docker appA]# git restore qq.ttx
[root@docker appA]# git status
On branch master
nothing to commit, working tree clean
# 撤销成功了
[root@docker appA]# cat qq.ttx
11
3、小结
-
当改乱了工作区的某个文件内容,想用直接丢弃工作区的修改时,用git restore file
-
当你修改了工作区的某个文件时,还添加到了暂存区里面,撤销的话,分2步,第一步用git reset HEAD file, 第二步用 git restore file
-
这个命令通用的 git reset --head HEAD (清空暂存区,丢弃工作区的所有修改,直接回到最新的commit)
-
已经提交了不合适的修改到版本库时,想要撤销本次的提交,可以直接回退到版本库 git reset --hard HEAD^
-
如果觉得代码有用的话,直接git add , git commit提交即可
-
撤销这个动作,非常有用,如果删除了文件,也是可以撤销的
git reset --hard 强制回滚,会将仓库,暂存区,本地文件全部恢复成目标版本,你现在在这些区域的所有修改都会被直接删除
新增的文件不会,因为没有被git add 控制
没有hard的话,仓库历史回退到指定的版本,你的修改的代码文件,没有变,但是状态可能变了,已修改,未提交的状态
4、文件差异的对比
git diff # 查看当前工作目录与暂存区文件的差异,知道哪些内容改了,还没有add
git diff --staged # 查看暂存区和本地仓库的差异,知道提交的什么代码
git diff HEAD # 查看工作区和最新一次提交,不管有没有add,现在的文件vs上一次提交的版本
git diff 版本id1 版本id2 # 比较2个版本之间的差异
1、查看当前工作区与HEAD版本修改差异
[root@docker appA]# echo "new line" >> code.txt
# 差异对比
# HEAD在前,修改的文件在后,决定了后面输出的信息的顺序
[root@docker appA]# git diff HEAD code.txt
diff --git a/code.txt b/code.txt
index 5e08e36..6d3a9ae 100644
--- a/code.txt # --- 表示HEAD
+++ b/code.txt # +++ 表示当前工作区的文件
@@ -3,3 +3,4 @@
33
44
diyici-m
+new line # 代表当前工作区比HEAD多一行
2、对比2个版本之间的差异
# 查看历史提交
[root@docker appA]# git reflog
97d79e2 (HEAD -> master) HEAD@{0}: commit: new file
7de8564 HEAD@{1}: reset: moving to 7de8564
ae68b82 HEAD@{2}: reset: moving to ae68b82
# 对比2个版本
[root@docker appA]# git diff 7de8564 97d79e2
diff --git a/code.txt b/code.txt
index 5e08e36..6d3a9ae 100644
--- a/code.txt
+++ b/code.txt # 表示最新版本
@@ -3,3 +3,4 @@
33
44
diyici-m
+new line # 最新版本多了一行内容
5、删除文件
1、删除硬盘和让git知道
就是将硬盘的上文件删除,同时删除操作记录到git里面
git commit提交删除
[root@master appA]# ls
11.txt
# 做了2件事,删除了磁盘文件和提交到了暂存区里面了
[root@master appA]# git rm 11.txt
rm '11.txt'
[root@master appA]# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: 11.txt
[root@master appA]# ls
[root@master appA]#
# 提交到仓库里面就能提交删除
[root@master appA]# git commit -m "delete 11.txt"
[master 12f6fac] delete 11.txt
1 file changed, 1 deletion(-)
delete mode 100644 11.txt
[root@master appA]# git status
On branch master
nothing to commit, working tree clean
2、删除git仓库里的文件同时保留本地文件
-
就是想让git不管理文件,但是本地还有这文件
-
不想提交,但是保留文件
[root@master appA]# git rm --cached 11.txt
rm '11.txt'
# git里面 11.txt被删除了,但是本地还在
[root@master appA]# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: 11.txt
Untracked files: # 没有被git管理的文件 11.txt
(use "git add <file>..." to include in what will be committed)
11.txt
# 提交即可
[root@master appA]# git commit -m "dele11.txt"
[master 457037f] dele11.txt
1 file changed, 1 deletion(-)
delete mode 100644 11.txt
[root@master appA]# git status
On branch master
Untracked files: # 11.txt没有被git管理
(use "git add <file>..." to include in what will be committed)
11.txt
nothing added to commit but untracked files present (use "git add" to track)
# 本地也有这个文件
[root@master appA]# ls
11.txt
6、移动文件
- git mv
[root@master appA]# git mv 11.txt 123.txt
[root@master appA]# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: 11.txt -> 123.txt
[root@master appA]# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: 11.txt -> 123.txt
[root@master appA]# git commit -m "rename11.txt"
[master 50594db] rename11.txt
1 file changed, 0 insertions(+), 0 deletions(-)
rename 11.txt => 123.txt (100%)
[root@master appA]# git status
On branch master
nothing to commit, working tree clean
git mv 相当于运行了三条命令
mv 11.txt 123.txt
git rm 11.txt
git add 123.txt
# git 会识别文件内容,发现内容一样,就表明是改了名
7、查看提交历史
查看提交的历史
git log
git log --online 只展示每个版本的一行
git log -p -2 查看最近2次提交的差异,对比一下
四、关于回退
git reset --hard 强制回滚,会将仓库,暂存区,本地文件全部恢复成目标版本,你现在在这些区域的所有修改都会被直接删除
新增的文件不会,因为没有被git add 控制
没有hard的话,仓库历史回退到指定的版本,你的修改的代码文件,没有变,但是状态可能变了,已修改,未提交的状态

浙公网安备 33010602011771号