GIT工具

一、GIT 分布式版本控制系统

分布式版本控制,没有中央服务器的概念,每个人都有自己的版本库,因此每个人在工作时候,不需要联网,版本库本地即可管理。

既然每个人都是一个完整的版本库,同事之间如果需要协作开发,就需要找一个用于“交换文件”的中央服务器,这个服务器不存在也不影响大家干活,只是用于交换文件内容。

GIT最强大的功能还有分支管理

image

1.git特点

1. git是分布式的,特点是保存本地文件的元数据(meta data,文件属性等),将本地文件所有的的元信息,记录在git repo里的.git隐藏文件夹中。

2. git的使用可以不用网络,因为本地版本控制仓库就在你自己机器上,每一个人就是一个完成的版本库。
只不过是最终将你的本地仓库,作为一个分支,推送、合并到一个统一的线上代码仓库主干线即可,实现代码集成。

2.git软件安装

Git有多种方式使用

原生命令行才能使用git所有命令,会git命令再去用gui图形工具,完全无压力
GUI图形软件,只是实现了git的部分功能,以减免操作难度,难以记住git原生命令
不同的人会有不同的GUI图形工具,但是所有人用的git原生命令都一样,推荐学习命令

2.1 windows装git

https://git-scm.com/download/win

image

2.2 linux\macos装git

https://git-scm.com/download/
也是一样,下载安装即可

yum install git -y

# 查看版本
git --version
git version 1.8.3.1

3.git身份设置

既然已经在系统上安装了 Git,你会想要做几件事来定制你的 Git 环境。
每台计算机上只需要配置一次,程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们。
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

这个用户指的是linux用户三种环境参数
--system
--global
--local
/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。
如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。(针对任意登录该linux的用户都生效)

~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 
可以传递 --global 选项让 Git 读写此文件。(只针对当前登录系统的用户生效)

当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。 
--local 当前仓库配置。(只针对某一个文件夹生效,例如/learn/linux/.git/config)
# 因为git是分布式版本控制系统,因为要区分出,到底是谁进行了版本管理,也就是提交的版本记录,都是有名字,有时间的。

# 因此用git之前要先设置git的身份设置

git config --global user.name "pyyu"
git config --global user.email "yc_uuu@163.com"
git config --global color.ui true

列出git设置

[root@cicd-99 ~]#git config --list
user.name=pyyu
user.email=yc_uuu@163.com
color.ui=true

我们这里配置的是--global参数,因此是在用户家目录下,可以查看
[root@chaogelinux ~]# cat .gitconfig
[user]
    name = pyyu
    email = yc_uuu@163.com
[color]
    ui = true

3.1 git身份设置命令集合

yum install git -y  安装git

git --version  查看git版本

git config --system --list 查看系统所有linux用户的通用配置,此命令检查/etc/gitconfig

git config --global --list 查看当前linux用户的配置,检查~/.gitconfig文件

git config --local --list 查看git目录中的仓库配置文件,.git/config文件

git config --global user.name "pyyu"  配置当前linux用户全局用户名,这台机器所有git仓库都会用这个配置

git config --global user.email "yc_uuu@163.com"  配置当前linux用户全局邮箱

git config --global color.ui true 配置git语法高亮显示

git config --list 列出git能找到的所有配置,从不同的文件中读取所有结果

git config user.name  列出git某一项配置

git help 获取git帮助

man git man手册

git help config 获取config命令的手册

4.git实践原理

git本地仓库,也就是一个文件夹,这个目录下的所有内容都被git工具管理,记录了所有文件的元数据。

你在这个本地仓库中所有对文件的修改,删除,都会被git记录下状态,便于历史记录跟踪,以及还原文件状态。

5.三个git使用的场景

5.1 本地已经写好了代码,需要用git去管理

cd /home/yuchao/my_shell/

git init   # 初始化一个普通的目录为 git local repo



git init命令会创建一个.git隐藏子目录,这个目录包含初始化git仓库所有的核心文件。

此步仅仅是初始化,此时项目里的代码还没有被git跟踪,因此还需要git add对项目文件跟踪,然后git commit提交到local repo。

如果想知道git详细原理,请看
https://git-scm.com/book/zh/v2/ch00/ch10-git-internals

5.2 从零新建git本地仓库,编写代码

mkdir /home/yuchao/

[root@cicd-99 ~]#git init  /home/yuchao/happy_linux
Initialized empty Git repository in /home/yuchao/happy_linux/.git/


此步会在当前路径创建happy_linux文件夹,happy_linux文件夹中包含了.git的初始化文件夹,所有配置

5.3 克隆远程仓库中的代码

国内的码云 gitee
国外的github
自建的私有仓库,gitlab
都是远程仓库

如果你想获取github上的代码,或者你公司gitlab私有仓库的代码,可以使用git clone命令,下载克隆远程仓库的代码。

git clone https://github.com/django/django.git

下载出来的代码已经是被git管理的本地仓库

你会发现所有的项目文件都在这里,等待后续开发

6.了解.git目录原理

[root@pyyuc ~/git_learning/mysite 11:08:19]#tree .git
.git
├── branches
├── config    这个项目独有的配置
├── description
├── HEAD    head文件指示目前被检出的分支
├── hooks  hooks目录包含服务端和客户端的钩子脚本 hook scripts
│   ├── 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  index文件保存暂存区的信息,只有git add之后才会生成,默认还没有这个文件
├── info    info目录是全局性排除文件,用于放置不想被记录在.gitignore文件中的忽略模式(ignored patterns)
│   └── exclude
├── objects  存储所有数据内容
│   ├── info
│   └── pack
└── refs  refs目录存储指向数据(分支)的提交对象的指针
    ├── heads
    └── tags

.git文件夹解析

7.图解git工作流

git实现本地版本控制系统,设计三大分区

workspace                               工作区(某文件夹)

Index/Stage/Cached               暂存区

Repository                                本地仓库

Remote Repository                 远程仓库(gitlab、github)

git的操控命令,就是在这四大工作区,来回切换的
本地文件夹未初始化时,git是不认识的
本地文件夹 git init后,就成了git local repo 本地仓库

请记住,在工作文件夹的每一个文件,只有两种状态,一个是未跟踪,一个是已跟踪
已跟踪的指的是已经被纳入git版本管理的文件,在git快照中有他的记录
执行git add . 表示添加所有未被git跟踪的文件,用git进行跟踪状态

image

image

8.git命令实践

8.1 从零初始化git本地仓库

该命令创建一个空的Git存储库 - 本质上是一个 .git 目录
# 1. 创建工作区,且初始化一个git本地仓库,文件夹叫做learn_git
[root@www.yuchaoit.cn ~]#mkdir -p /home/yuchao/ && cd /home/yuchao/
[root@www.yuchaoit.cn /home/yuchao]#git init learn_git
Initialized empty Git repository in /home/yuchao/learn_git/.git/
[root@www.yuchaoit.cn /home/yuchao]#tree
.
└── learn_git

1 directory, 0 files

8.2 查看暂存区

暂存区(stage或index): 也叫缓存区

暂存区就看作是一个缓区区域,临时保存你的改动。

如果在工作目录创建了一个新文件,需要将新文件添加到暂存区。
创建新文件,添加到暂存区
# 1. 生成新文件

进入到本地仓库
[root@www.yuchaoit.cn /home/yuchao]#cd /home/yuchao/learn_git

 此时这个文件还未被git管理
[root@www.yuchaoit.cn /home/yuchao/learn_git]#echo "加油努力干,攒钱买房买车娶媳妇!!" >  jiayou.sh

查看文件状态
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    jiayou.sh
nothing added to commit but untracked files present (use "git add" to track)

此时该文件,是还未被跟踪的状态

使用git add命令,提交该文件到暂存区,且进行跟踪(逆向操作,git rm --cached jiayou.sh )

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git add jiayou.sh
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#    new file:   jiayou.sh
#

此时查看.git文件夹中多了一个index文件,就是暂存区文件
[root@www.yuchaoit.cn /home/yuchao/learn_git]#file .git/index
.git/index: Git index, version 2, 1 entries

可以用strings命令查看该文件数据,已经记录了jiayou.sh
[root@www.yuchaoit.cn /home/yuchao/learn_git]#strings .git/index
DIRC
O?Cb
    jiayou.sh

8.3 从暂存区移除文件

[root@www.yuchaoit.cn /home/yuchao/learn_git]#echo "坚持下去,才会开花结果!!" >> jianchi.sh
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git add .
[root@www.yuchaoit.cn /home/yuchao/learn_git]#strings .git/index
DIRC
!gLb
jianchi.sh
O?Cb
    jiayou.sh
Daw)


从暂存区移除该俩2文件的记录,也就是取消用git去跟踪管理
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#    new file:   jianchi.sh
#    new file:   jiayou.sh

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git rm --cached jia*
rm 'jianchi.sh'
rm 'jiayou.sh'

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    jianchi.sh
#    jiayou.sh
nothing added to commit but untracked files present (use "git add" to track)


再次查看index暂存区信息
[root@www.yuchaoit.cn /home/yuchao/learn_git]#strings .git/index
DIRC

8.4 重新跟踪、提交文件

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    jianchi.sh
#    jiayou.sh
nothing added to commit but untracked files present (use "git add" to track)

# 提交文件从工作区  > 暂存区,进行git跟踪状态
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git add .

8.5 查看文件状态

git status 命令可以查看工作区里有哪些文件需要被提交,以及是否被git跟踪

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#    new file:   jianchi.sh
#    new file:   jiayou.sh
#

8.6 基于git的文件重命名

目前我们已经发现,在git的工作区中操作,会有2个状态

1是未被git追踪的文件
2是被git追踪的文件(记录到暂存区了)

那么你如果直接修改文件名,就得注意,是否被git追踪了,以及如何正确的玩法。
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git mv jiayou2.sh jiajiayou.sh
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#    new file:   jiajiayou.sh
#    new file:   jianchi.sh
#

8.7 基于git的删除文件

也就是这个文件的确不想要了,从暂存区移除追踪记录
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git rm --cached jia*
rm 'jiajiayou.sh'
rm 'jianchi.sh'

[root@www.yuchaoit.cn /home/yuchao/learn_git]#ll
total 8
-rw-r--r-- 1 root root 52 Jul  6 18:13 jiajiayou.sh
-rw-r--r-- 1 root root 40 Jul  6 18:13 jianchi.sh
[root@www.yuchaoit.cn /home/yuchao/learn_git]#
[root@www.yuchaoit.cn /home/yuchao/learn_git]#
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    jiajiayou.sh
#    jianchi.sh
nothing added to commit but untracked files present (use "git add" to track)
[root@www.yuchaoit.cn /home/yuchao/learn_git]#

此时再删除,就彻底没了
[root@www.yuchaoit.cn /home/yuchao/learn_git]#rm -f jia*
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
[root@www.yuchaoit.cn /home/yuchao/learn_git]#
[root@www.yuchaoit.cn /home/yuchao/learn_git]#ls

8.8 提交暂存区数据到local repo

image

提交v1版本

我们目前,都只是在 工作区和暂存区 进行玩耍

git commit 可以提交暂存区的临时数据,放入local repo,提交为第一个版本
[root@www.yuchaoit.cn /home/yuchao/learn_git]#echo '加油啊兄弟们,胜利的曙光就要看到了!!' > laoliu.sh
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git add .
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#    new file:   laoliu.sh
#

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git commit -m 'first commit with line 1'
[master (root-commit) fb118ba] first commit with line 1
 1 file changed, 1 insertion(+)
 create mode 100644 laoliu.sh

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git log
commit fb118ba9639431c32f1a1f22bff8e4b0ddaac1cb
Author: pyyu <yc_uuu@163.com>
Date:   Wed Jul 6 18:40:02 2022 +0800

    first commit with line 1


此时再用git status啥也看不到了,干净的工作区
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
nothing to commit, working directory clean

提交v2版本

[root@www.yuchaoit.cn /home/yuchao/learn_git]#cat laoliu.sh
加油啊兄弟们,胜利的曙光就要看到了!!
好的,我一定相信自己,加油努力,给自己一个满意的结果!!

git已经发现文件内容被修改了
[root@www.yuchaoit.cn /home/yuchao/learn_git]#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:   laoliu.sh
#
no changes added to commit (use "git add" and/or "git commit -a")
用git diff看看文件内容区别
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git diff laoliu.sh
diff --git a/laoliu.sh b/laoliu.sh
index 5018c92..b736bb6 100644
--- a/laoliu.sh
+++ b/laoliu.sh
@@ -1 +1,2 @@
 加油啊兄弟们,胜利的曙光就要看到了!!
+好的,我一定相信自己,加油努力,给自己一个满意的结果!!

+号开头,表示这一行是新增的内容
提交v2版本,提交第二个commit记录,每一次commit 都会有id记录
记住,先git add,提交到暂存区,然后再commit,到本地仓库

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git add .
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    modified:   laoliu.sh
#

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git commit -m 'v2 添加了第二行数据'
[master 9a3bd4d] v2 添加了第二行数据
 1 file changed, 1 insertion(+)

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git log
commit 9a3bd4d40480749247e4c784a24fb13cb0fb0120
Author: pyyu <yc_uuu@163.com>
Date:   Wed Jul 6 18:46:34 2022 +0800

    v2 添加了第二行数据

commit fb118ba9639431c32f1a1f22bff8e4b0ddaac1cb
Author: pyyu <yc_uuu@163.com>
Date:   Wed Jul 6 18:40:02 2022 +0800

    first commit with line 1

因此,通过 git log 可以查看到每一次的提交记录。

提交v3版本

[root@www.yuchaoit.cn /home/yuchao/learn_git]#cat laoliu.sh
加油啊兄弟们,胜利的曙光就要看到了!!
好的,我一定相信自己,加油努力,给自己一个满意的结果!!

兄弟们,git工具,一般是开发人员用的多,我们运维一般也就是上传,下载代码而已了。
[root@www.yuchaoit.cn /home/yuchao/learn_git]#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:   laoliu.sh
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@www.yuchaoit.cn /home/yuchao/learn_git]#


添加,提交
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git commit -m 'v3 就玩三次吧'
[master e9547df] v3 就玩三次吧
 1 file changed, 2 insertions(+)
[root@www.yuchaoit.cn /home/yuchao/learn_git]#
[root@www.yuchaoit.cn /home/yuchao/learn_git]#
[root@www.yuchaoit.cn /home/yuchao/learn_git]#
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git status
# On branch master
nothing to commit, working directory clean
[root@www.yuchaoit.cn /home/yuchao/learn_git]#

git命令小结

1. 创建文件数据
2. git add 文件名  追踪文件,添加到暂存区
3. git status 查看工作区的文件状态
4. git diff 文件名  查看文件修改的对比情况
5. git commit -m '提交注释'  提交暂存区的内容到本地仓库
6. 结束第一次版本提交
7. 多次commit 提交,就存在了多次版本记录,git 可以实现版本回退功能

9.git版本历史

9.1 git log

git log命令显示,从最新的commit记录到最远的记录顺序。
git log --oneline    一行显示git记录
git log --oneline  --all  一行显示所有分支git记录
git log --oneline --all -4 --graph 显示所有分支的版本演进的最近4条
git log -4  显示最近4条记录
git log --all     显示所有分支的commit信息

git branch -v 查看分支信息

git help --web log 以浏览器界面显示log的参数

9.2 查看提交版本历史

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git log
commit e9547dfc7aa124564bb962031b08053d127d5d6b
Author: pyyu <yc_uuu@163.com>
Date:   Wed Jul 6 18:49:34 2022 +0800

    v3 就玩三次吧

commit 9a3bd4d40480749247e4c784a24fb13cb0fb0120
Author: pyyu <yc_uuu@163.com>
Date:   Wed Jul 6 18:46:34 2022 +0800

    v2 添加了第二行数据

commit fb118ba9639431c32f1a1f22bff8e4b0ddaac1cb
Author: pyyu <yc_uuu@163.com>
Date:   Wed Jul 6 18:40:02 2022 +0800

    first commit with line 1



[root@www.yuchaoit.cn /home/yuchao/learn_git]#git log --oneline
e9547df v3 就玩三次吧
9a3bd4d v2 添加了第二行数据
fb118ba first commit with line 1



查看最新2条日志
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git log -2 --oneline
e9547df v3 就玩三次吧
9a3bd4d v2 添加了第二行数据


前面的字符串,就是commit 版本提交记录ID

9.3 git版本回退

git log可以查看历史版本记录
git reset --hard命令可以回退版本
git reset --hard HEAD^ 回退到上个版本
HEAD表示当前版版本
HEAD^  表示上1个版本
HEAD^^ 上2个版本

也可以直接git reset --hard 版本id号

这个时候就发现,git commit -m 所标记的注释信息非常重要了吧,可以让你自己知道到底回退到什么版本

回退上一个版本,回到v2

[root@www.yuchaoit.cn /home/yuchao/learn_git]#cat laoliu.sh
加油啊兄弟们,胜利的曙光就要看到了!!
好的,我一定相信自己,加油努力,给自己一个满意的结果!!

兄弟们,git工具,一般是开发人员用的多,我们运维一般也就是上传,下载代码而已了。

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git reset --hard HEAD^
HEAD is now at 9a3bd4d v2 添加了第二行数据

[root@www.yuchaoit.cn /home/yuchao/learn_git]#cat laoliu.sh
加油啊兄弟们,胜利的曙光就要看到了!!
好的超哥,我一定相信自己,加油努力,给自己一个满意的结果!!

再回到第一个v1版本

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git reset --hard HEAD^
HEAD is now at fb118ba first commit with line 1

[root@www.yuchaoit.cn /home/yuchao/learn_git]#cat laoliu.sh
加油啊兄弟们,胜利的曙光就要看到了!!

还想回到v3版本

git reflog可以看到所有的git操作历史,也就可以看到commit版本记录的id了。
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git reflog
fb118ba HEAD@{0}: reset: moving to HEAD^
9a3bd4d HEAD@{1}: reset: moving to HEAD^
e9547df HEAD@{2}: commit: v3 就玩三次吧
9a3bd4d HEAD@{3}: commit: v2 添加了第二行数据
fb118ba HEAD@{4}: commit (initial): first commit with line 1

回到v3版本,基于commit即可

[root@www.yuchaoit.cn /home/yuchao/learn_git]#cat laoliu.sh
加油啊兄弟们,胜利的曙光就要看到了!!
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git reflog
fb118ba HEAD@{0}: reset: moving to HEAD^
9a3bd4d HEAD@{1}: reset: moving to HEAD^
e9547df HEAD@{2}: commit: v3 就玩三次吧
9a3bd4d HEAD@{3}: commit: v2 添加了第二行数据
fb118ba HEAD@{4}: commit (initial): first commit with line 1

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git reset --hard e9547df
HEAD is now at e9547df v3 就玩三次吧

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git reflog
e9547df HEAD@{0}: reset: moving to e9547df
fb118ba HEAD@{1}: reset: moving to HEAD^
9a3bd4d HEAD@{2}: reset: moving to HEAD^
e9547df HEAD@{3}: commit: v3 就玩三次吧
9a3bd4d HEAD@{4}: commit: v2 添加了第二行数据
fb118ba HEAD@{5}: commit (initial): first commit with line 1

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git log --oneline
e9547df v3 就玩三次吧
9a3bd4d v2 添加了第二行数据
fb118ba first commit with line 1

[root@www.yuchaoit.cn /home/yuchao/learn_git]#cat laoliu.sh
加油啊兄弟们,胜利的曙光就要看到了!!
好的,我一定相信自己,加油努力,给自己一个满意的结果!!

兄弟们,git工具,一般是开发人员用的多,我们运维一般也就是上传,下载代码而已了。

9.4 git log总结

git log 原理图
image

提交后的代码文件,使用git log查看当前版本及以前的历史版本。
使用git reset --hard HEAD^或者git reset --hard HEAD^^实现版本回退。
使用git reflog 查看提交的所有操作及版本号
使用git reset --hard 版本号 你可以自由的在不同版本之间来回切换。

10.git撤销功能

写代码

[root@www.yuchaoit.cn /home/yuchao/learn_git]#cat hello.sh
echo "练一练git撤销命令?"
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git add .
[root@www.yuchaoit.cn /home/yuchao/learn_git]#git commit -m 'v1 hello.sh'
[master 049a22f] v1 hello.sh
 1 file changed, 1 insertion(+)
 create mode 100644 hello.sh

故意写错

[root@www.yuchaoit.cn /home/yuchao/learn_git]#cat hello.sh
echo "练一练git撤销命令?"
你瞅啥?给你邦邦两拳!

[root@www.yuchaoit.cn /home/yuchao/learn_git]#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:   hello.sh
#
no changes added to commit (use "git add" and/or "git commit -a")

撤销的多种情况

直接删除就行,但是如果内容太多,你摸不清发生啥了呢?就没办法了

使用git checkout -- 文件名就可以直接撤销修改了

如果写乱了代码,添加暂存区但还没有commit提交。使用git reset HEAD 文件名取消暂存区添加,再git checkout -- 文件名来撤销修改

如果写乱了代码,添加暂存区并提交了。则使用版本回退

我们这里,还未添加到暂存区,直接撤销

[root@www.yuchaoit.cn /home/yuchao/learn_git]#git checkout -- hello.sh
[root@www.yuchaoit.cn /home/yuchao/learn_git]#cat hello.sh
echo "练一练git撤销命令?"

11.git版本控制总结

image

posted @ 2023-10-30 11:29  村尚chun叔  阅读(30)  评论(0编辑  收藏  举报