练习实践-git工具-id:1-git 工具的基础命令

2024-09-06 11:28

本文主要是介绍练习实践-git工具-id:1-git 工具的基础命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考来源:
csdn技能树-git
https://fishc.com.cn/forum-334-1.html fishc论坛的扩展阅读

git能做什么?

进行版本控制,版本记录、版本回退;

需求场景:一个新的开发项目,随着功能的增加,代码量、相关文件数量也在逐渐增多……
这样开发就会遇到一个问题:当需要修改一些代码的时候,不得已要删除另外一些代码。第二天脑袋突然被门框给夹了一下,又想恢复回昨天删除的代码,肿么办?

git的创作和出版时间线

2005年4月3日:Linus 开始开发 Git
2005年4月6日:Git 项目对外发布
2005年4月7日:Git 实现作为自身的版本控制工具
2005年4月18日:实现多分支合并
2005年6月16日:Linux 内核 2.6.12 发布,Git 已经可以用于维护 Linux 核心源码
2005年7月26日:Linus 功成身退,将 Git 的维护工作交给另一名 Git 的主要贡献者 Junio C Hamano

与git相关的两个消息

消息1:github上线

2008 年,GitHub(http://www.github.com)网站正式上线,它为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub。

消息2:SVN 和 Git 的区别在哪里吗?

同类型的其他版本控制系统的区别,其他版本控制系统有RCS、CVS、SVN
最核心的区别时 SVN 是集中式的版本控制系统,而 Git 是分布式的。

集中式版本控制系统需要找一个服务器作为大本营,所有的代码都需要提交到服务器上进行统一的管理。当你需要对代码进行改动时,需要先从服务器上下载一份拷贝,修改完成之后,还需要上传回服务器。

在分布式版本控制系统中,大家都拥有一个完整的版本库,不需要联网也可以提交修改,所以中心服务器就显得不那么重要了。
那开发成员之间如何交换修改呢?
由于大家都拥有一个完整的版本库,所以只需把各自的修改推送给对方,就可以互相看到对方的修改了。
不过分布式版本控制系统一般也有一个“中心服务器”,但它只是用于方便大家的交换而已(挂了也没关系),而 GitHub 就是这么一个平台。

版本控制工具关注的特性:

版本同步的速度、版本更新的影响(高内聚)、版本依赖问题(低耦合)、版本异常容错机制(高可用)

克隆一份全新的目录以同样拥有 5 个分支来说,SVN 是同时复製 5 个版本的文件,也就是说重复 5 次同样的动作。而 Git 只是获取文件的每个版本的元素,然后只载入主要的分支(master)。在我的经验,克隆一个拥有将近一万个提交(commit),5 个分支,每个分支有大约 1500 个文件的 SVN,耗了将近 1 小时!而 Git 只用了区区的 1 分钟!

在 SVN,分支是一个完整的目录。且这个目录拥有完整的实际文件。如果工作成员想要开啟新的分支,那将会影响“全世界”!每个人都会拥有和你一样的分支。如果你的分支是用来进行破坏工作(安检测试),那将会像传染病一样,你改一个分支,还得让其他人重新切分支重新下载,十分狗血。而 Git,每个工作成员可以任意在自己的本地版本库开启无限个分支。举例:当我想尝试破坏自己的程序(安检测试),并且想保留这些被修改的文件供日后使用, 我可以开一个分支,做我喜欢的事。完全不需担心妨碍其他工作成员。只要我不合并及提交到主要版本库,没有一个工作成员会被影响。等到我不需要这个分支时, 我只要把它从我的本地版本库删除即可。无痛无痒。

SVN 只能有一个指定中间版本库。当这个中间版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。而 Git 可以有无限个版本库。或者,更正确的说法,每一个 Git 都是一个版本库,区别是它们是否拥有活跃目录(Git Working Tree)。如果主要版本库(例如:GitHub 的版本库)发生了什么事,工作成员仍然可以在自己的本地版本库(local repository)提交,等待主要版本库恢复即可。工作成员也可以提交到其他的版本库!

在 SVN,当你提交你的完成品时,它将直接记录到中间版本库。当你发现你的完成品存在严重问题时,你已经无法阻止事情的发生了。如果网路中断,你根本没办法提交!而 Git 的提交完全属於本地版本库的活动。而你只需“推”(git push)到主要版本库即可。Git 的“推”其实是在执行“同步”(Sync)

学习策略推荐:

来自git作者Linus Torvalds在git十周年的演讲推荐
学习 Git 的最好方法是从基本开始,熟悉基础后再去摸索不一样的东西。

开始基本部分的练习实践记录

步骤一:安装git软件,pass

步骤二:配置本地git全局配置信息

全局配置中的名称和邮箱设置,检查全局配置

C:\Users\Administrator>git config --global user.name "****"
C:\Users\Administrator>git config --global user.email ***@163.com
C:\Users\Administrator>git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=D:/git/Git/mingw64/etc/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
gui.recentrepo=F:/tmp/githubtmp
user.name=***
user.email=***@163.comC:\Users\Administrator>

步骤三:创建目标,初始化仓库

创建一个用来存放git学习的文件夹,作为git学习的仓库

F:\tmp\learning-git>git init
Initialized empty Git repository in F:/tmp/learning-git/.git/

步骤四:创建一个readme.txt文件,并写入内容,作为测试原材料

写入readme.txt文件

F:\tmp\learning-git>echo "Git is a version control system." >readme.txt
F:\tmp\learning-git>echo "Git is free software." >>readme.txt
F:\tmp\learning-git>type readme.txt
"Git is a version control system."
"Git is free software."
F:\tmp\learning-git>

步骤五:进行版本提交操作–git添加文件需要两步

第一步 add 文件

没有任何显示,说明提交成功

F:\tmp\learning-git>git add readme.txtF:\tmp\learning-git>

第二步 commit 加-m参数备注信息,易读性

F:\tmp\learning-git>git commit -m "wrote a readme file"
[master (root-commit) b75599d] wrote a readme file1 file changed, 2 insertions(+)create mode 100644 readme.txtF:\tmp\learning-git>

步骤六:修改文件(最后添加一行),查看git状态,理解输出内容

F:\tmp\learning-git>echo "add new line." >>readme.txt  #追加模式F:\tmp\learning-git>type readme.txt   #windows下查看文件内容用type
"Git is a version control system."
"\nGit is free software."
"add new line."F:\tmp\learning-git>git status  #查看git状态
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:   readme.txtno changes added to commit (use "git add" and/or "git commit -a")F:\tmp\learning-git>

步骤七:查看版本变动内容

F:\tmp\learning-git>git diff
diff --git a/readme.txt b/readme.txt
index 6b71d15..c4a59d3 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@"Git is a version control system.""\nGit is free software."
+"add new line."F:\tmp\learning-git>

步骤八:了解了变动之后,重新通过两步提交,查询git状态确认

F:\tmp\learning-git>git add readme.txtF:\tmp\learning-git>git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)modified:   readme.txtF:\tmp\learning-git>git commit -m "add distributed"
[master 02d503a] add distributed1 file changed, 1 insertion(+)F:\tmp\learning-git>git status
On branch master
nothing to commit, working tree clean

步骤九:查看日志,优化日志显示内容

F:\tmp\learning-git>git log --pretty=oneline
02d503a922312ecacb92ca012ace6d3064fc428f (HEAD -> master) add distributed
b75599d967b37ba3687be9dc1605181dd15201dd wrote a readme fileF:\tmp\learning-git>git log
commit 02d503a922312ecacb92ca012ace6d3064fc428f (HEAD -> master)
Author: luoluojialuo <top_top_way@163.com>
Date:   Wed Aug 28 00:24:46 2024 +0800add distributedcommit b75599d967b37ba3687be9dc1605181dd15201dd
Author: luoluojialuo <top_top_way@163.com>
Date:   Wed Aug 28 00:18:16 2024 +0800wrote a readme file

步骤十:版本回退–遇到非预期问题

F:\tmp\learning-git>git -h HEAD
fatal: 'D:/git/Git/mingw64/share/doc/git-doc/gitHEAD.html': documentation file not found.F:\tmp\learning-git>git reset --hard HEAD^
More?
HEAD is now at 02d503a add distributedF:\tmp\learning-git>type readme.txt
"Git is a version control system."
"\nGit is free software."
"add new line."F:\tmp\learning-git>

没有回退成功,没有报错,不知道啥原因,More之后有个问号?我点了回车

步骤十一:版本重置,查询重置日志

版本回退之后的后悔药,通过查询重置日志,重置到指定版本

F:\tmp\learning-git>git reflog
b75599d (HEAD -> master) HEAD@{0}: reset: moving to HEAD
b75599d (HEAD -> master) HEAD@{1}: reset: moving to HEAD^
02d503a HEAD@{2}: reset: moving to HEAD
02d503a HEAD@{3}: commit: add distributed
b75599d (HEAD -> master) HEAD@{4}: commit (initial): wrote a readme fileF:\tmp\learning-git>type readme.txt
"Git is a version control system."
"\nGit is free software."
F:\tmp\learning-git>git reset --hard 02d5
HEAD is now at 02d503a add distributedF:\tmp\learning-git>type readme.txt
"Git is a version control system."
"\nGit is free software."
"add new line."F:\tmp\learning-git>

快速回顾:通过十一个步骤的小结,得到git的基础操作场景有:
git全局配置和仓库初始化;
版本提交;
版本状态查看;
版本回退、版本重置;
查看日志、查看版本重置日志;

这篇关于练习实践-git工具-id:1-git 工具的基础命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141874

相关文章

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.