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

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截图任务,还能快速编辑、标注甚至保存多种格式的图片。这款工具能满足这些需求吗? PixPin不仅支持全屏、窗口、区域截图等基础功能,它还可以进行延时截图,让你捕捉到每个关键画面。不仅如此