GIT基本使用方式
GIT使用方式#
简介#
Git和SVN是我们最常用的版本控制系(Version Control System, VCS),当然,除了这二者之外还有许多其他的VCS,例如早期的CVS等。顾名思义,版本控制系统主要就是控制、协调各个版本的文档内容的一致性,这些文档包括但不限于代码文件、图片文件等等。早期SVN占据了绝大部分市场,而后来随着Git的出现,越来越多的人选择将它作为版本控制工具,社区也越来越强大。相较于SVN,最核心的区别是Git是分布式的VCS,简而言之,每一个你pull下来的Git仓库都是主仓库的一个分布式版本,仓库的内容完全一样,而SVN则不然,它需要一个中央版本库来进行集中控制。采用分布式模式的好处便是你不再依赖于网络,当有更改需要提交的时候而你又无法连接网络时,你只需要把更改提交到本地的Git仓库,最后有网络的时候再把本地仓库和远程的主仓库进行同步即可。
工作原理#
- Workspace:工作区
- Index:暂存区
- Repository:仓库区/本地仓库
- Remote:远程仓库
SVN与GIT区别#
SVN#
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了
GIT#
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了
安装配置#
安装#
sudo apt-get install -y git # 安装
git version # 查看git版本

标识#
- GIT基于分布式版本控制需要用户名与邮箱作为标识
- 通过设置标识标明本机器所有GIT仓库都会使用该标识
- 当然也可以针对特定的仓库设定单独的标识
git config --global user.name "SR" # 设置全局用户名标识
git config --global user.email "srcoder@163.com" # 设置全局邮箱标识
git config --list # 检查全局配置
GIT基本使用方式#
创建版本库#
什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”
mkdir Desktop/git_test # 创建git测试文件夹
git init # 初始化仓库
ls -al # 查看当前文件夹文件

文件提交#
jason@jason:~/Desktop/git_test$ touch readme.txt # 创建测试文件
jason@jason:~/Desktop/git_test$ git add readme.txt # 添加暂存区域
jason@jason:~/Desktop/git_test$ git commit -m "提交readme.txt" # 进行提交 -m 后属于提交注释
jason@jason:~/Desktop/git_test$ git status # 查看当前状态

# 修改文件内容 查看文件状态
jason@jason:~/Desktop/git_test$ echo 1111 > readme.txt # 修改文件内容
jason@jason:~/Desktop/git_test$ git status # 查看修改之后的状态

# 查看被修改的内容
jason@jason:~/Desktop/git_test$ git diff readme.txt # 查看修改内容

# 提交修改之后的内容
jason@jason:~/Desktop/git_test$ git add readme.txt
jason@jason:~/Desktop/git_test$ git status
jason@jason:~/Desktop/git_test$ git commit -m "添加111到readme.txt"
jason@jason:~/Desktop/git_test$ git status
版本回退#
# 查看历史操作记录
jason@jason:~/Desktop/git_test$ git log
jason@jason:~/Desktop/git_test$ git log --pretty=oneline # 若下图显示过多可以使用此命令
# 版本回退
jason@jason:~/Desktop/git_test$ touch test.txt
jason@jason:~/Desktop/git_test$ echo "111" > test.txt # 添加测试数据
jason@jason:~/Desktop/git_test$ git add test.txt
jason@jason:~/Desktop/git_test$ git commit -m "添加测试文件1111"
jason@jason:~/Desktop/git_test$ git status
jason@jason:~/Desktop/git_test$ git reset --hard HEAD^ # 版本回退
jason@jason:~/Desktop/git_test$ cat test.txt

- 如果要回到上上版本则git reset --hard HEAD^^依次类推
- 如果要回退到前100个版本上述方法肯定不方便git reset --hard HEAD~100(直接跟回退的版本)
# 回退到上述111所在的版本
jason@jason:~/Desktop/git_test$ git reflog # 查看删除的版本号
jason@jason:~/Desktop/git_test$ git reset --hard ceb6920 # --hard后面加上想要恢复的版本号
jason@jason:~/Desktop/git_test$ cat test.txt

工作区与暂存区#
工作区#
- 就是你在电脑上看到的目录,比如目录下git_test里的文件
- 以后在git_test文件夹下创建的文件以及文件夹都属于工作区
- git_test下.git文件不属于工作区此时属于版本库

版本库#
- Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支
master
,以及指向master
的一个指针叫HEAD
。 - git add把文件添加进去,实际上就是把文件修改添加到暂存区;
- git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
- 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,现在,git commit就是往master分支上提交更改。

jason@jason:~/Desktop/git_test$ echo 222 >> test.txt # 写入新的数据
jason@jason:~/Desktop/git_test$ touch readme1.txt # 添加新的文件
jason@jason:~/Desktop/git_test$ git status # 查看当前状态

# 将文件加入暂存区域
jason@jason:~/Desktop/git_test$ git add test.txt readme1.txt # 加入暂存区
jason@jason:~/Desktop/git_test$ git status

# 一次性提交文件
jason@jason:~/Desktop/git_test$ git commit -m "提交文件"
jason@jason:~/Desktop/git_test$ git status

GIT撤销修改和删除#
撤销修改#
未放入暂存区#
jason@jason:~/Desktop/git_test$ echo 333 >> test.txt # 添加测试数据
jason@jason:~/Desktop/git_test$ cat test.txt
jason@jason:~/Desktop/git_test$ git checkout -- test.txt # 撤销修改
jason@jason:~/Desktop/git_test$ cat test.txt

放入暂存区#
jason@jason:~/Desktop/git_test$ echo 444 >> test.txt
jason@jason:~/Desktop/git_test$ git add test.txt # 加入暂存区
jason@jason:~/Desktop/git_test$ echo 555 >> test.txt # 添加测试数据
jason@jason:~/Desktop/git_test$ git checkout -- test.txt # 撤销数据 若无--则切换分支
jason@jason:~/Desktop/git_test$ cat test.txt

# 如果将上述已经加入暂存区的取消
jason@jason:~/Desktop/git_test$ git reset HEAD # 清空暂存区
jason@jason:~/Desktop/git_test$ git checkout -- test.txt # 撤销
jason@jason:~/Desktop/git_test$ cat test.txt

删除版本#
jason@jason:~/Desktop/git_test$ touch b.txt
jason@jason:~/Desktop/git_test$ git add b.txt
jason@jason:~/Desktop/git_test$ git commit -m "add b.txt"
jason@jason:~/Desktop/git_test$ rm -fr b.txt # 删除b.txt文件
jason@jason:~/Desktop/git_test$ git status

# 恢复上述删除的状态
jason@jason:~/Desktop/git_test$ git checkout -- b.txt
jason@jason:~/Desktop/git_test$ ls # 查看文件

jason@jason:~/Desktop/git_test$ rm -fr b.txt
jason@jason:~/Desktop/git_test$ git add b.txt
jason@jason:~/Desktop/git_test$ git commit -m "delete b.txt"
jason@jason:~/Desktop/git_test$ git status

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2019-11-25 爬虫基础简介