练习实践-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

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas