练习实践-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 Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

基于Python打造一个全能文本处理工具

《基于Python打造一个全能文本处理工具》:本文主要介绍一个基于Python+Tkinter开发的全功能本地化文本处理工具,它不仅具备基础的格式转换功能,更集成了中文特色处理等实用功能,有需要的... 目录1. 概述:当文本处理遇上python图形界面2. 功能全景图:六大核心模块解析3.运行效果4. 相

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Python 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文