一、为什么要使用Git?
1.传统文档管理
在我们写毕业论文时可能会遇到,多次修改之后的论文命名方式:
论文_改.doc、论文_改改.doc、论文_改改改.doc、论文_改改改改.doc、论文_改改改改再改.doc、
论文_改改改改再改TM不改了.doc
2.源代码管理的好处
-
方便多人协同开发
-
方便版本控制
3.Git的诞生
-
作者Linux之父:Linux Torvalds
-
git开发目的:为了辅助 Linux 内核的开发
-
是 Linux Torvals 在无奈被逼的情况下创造的
-
2008年,GitHub 网站上线,为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub
-
Git 迅速成为最流行的分布式版本控制系统(没有之一)
二、Git结构
1.结构分析
Git
是分布式管理系统。服务器和客户端都有版本控制能力,都能进行代码的提交、合并。
2.本地代码管理
工作区(Workspace):添加、
修改、
删除`文件
暂存区(Index):将工作区中的操作完成小阶段的存储,是版本库的一部分
本地仓库区(Respository): 对个人开发的一个小阶段代码存储
-
记录的各版本可以查看或者回退
-
但是在暂存区的版本一旦提交就再也没有了(保存到仓库区中)
三、本地仓库操作
1.安装git
# 在虚拟机上安装
sudo apt-get install git
2.查看是否安装成功
git version 查看版本
3.创建项目
1,创建test_git 文件夹, 表示工作项目
2,cd test_git
3,git init 初始化本地仓库
# 会创建一个.git隐藏文件
++ ls -al
total 12
drwxrwxr-x 3 Conner Conner 4096 11月 27 16:22 .
drwxr-xr-x 14 Conner Conner 4096 11月 27 16:22 ..
drwxrwxr-x 7 Conner Conner 4096 11月 27 16:22 .git
++ ls .git 显示配置信息
c.配置个人信息
# 配置个人信息
git config user.name "laowang"
git config user.email "python@admin.com"
# 配置信息出现在.git/config文件中
d.新建测试文件
vim test11.py
e.查看文件状态
git status
####f.将工作区添加到暂存区
# 添加项目中所有文件
git add .
或者
# 添加指定文件
git add test01.py
g.将暂存区文件提交到仓库区
commit会生成一条版本记录
-m后面是版本描述信息
git commit -m '版本描述'
git status 查看工作区没了
git log 查看提交操作
git reflog 可以查看的还有版本号
git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录,git log 不能察看已经删除了的commit记录
修改文件
vim test11.py
查看状态
git status # 会变成红色 提示修改
提交内容到工作区
git commit -am '新增内容'
4.回退版本
方法一:
-
HEAD
表示当前最新版本 -
HEAD^
表示当前最新版本的前一个版本 -
HEAD^^
表示当前最新版本的前两个版本,以此类推... -
HEAD~1
表示当前最新版本的前一个版本 -
HEAD~10
表示当前最新版本的前10个版本,以此类推...
git reset --hard HEAD~1
git reset --hard e26674f(版本号)
5.撤销修改
-
只能撤销工作区、暂存区的代码,不能撤销仓库区的代码
-
撤销仓库区的代码就相当于回退版本操作
-
撤销工作区代码
-
新加代码
num3 = 30
,不add
到暂存区,保留在工作区
git checkout 文件名 -
-
撤销暂存区代码
-
新加代码
num3 = 30
,并add
到暂存区
-
# 第一步:将暂存区代码撤销到工作区
git reset HEAD 文件名
# 第二步:撤销工作区代码
git checkout 文件名
cat test.py # 添加的内容消失了 -
6.文件删除
-
确定删除处理与误删
-
确定删除
# 删除文件
rm 文件名
# git确定删除文件,对比添加文件git add
git rm 文件名
# 删除后记录删除操作版本
git commit -m '删除描述'提交删除就能撤消更改了, 下面的方法可以撤回
-
-
误删处理,撤销修改
# 删除文件
rm test11.py
# git撤销修改
git checkout -- 文件名