练习实践-git工具-id:2-git 仓库部分的基础命令

2024-09-06 11:04

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

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

git分支的实现原理理解–三棵树-工作、缓存、仓库

在这里插入图片描述

1.创建一个新文件license,修改readme.txt文件内容,之后查看git状态信息

F:\tmp\learning-git>echo "This is a license." >LICENSEF:\tmp\learning-git>echo "Git has a mutable index called stage." >>readme.txtF:\tmp\learning-git>dir驱动器 F 中的卷是 tmp卷的序列号是 0800-B859F:\tmp\learning-git 的目录
24/08/28  上午 12:47    <DIR>          .
24/08/28  上午 12:47    <DIR>          ..
24/08/28  上午 12:47                23 LICENSE
24/08/28  上午 12:48               125 readme.txt2 个文件            148 字节2 个目录 29,917,978,624 可用字节
F:\tmp\learning-git>git status
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.txtUntracked files:(use "git add <file>..." to include in what will be committed)LICENSEno changes added to commit (use "git add" and/or "git commit -a")F:\tmp\learning-git>

2.添加文件,查询git状态,此时文件就放在了git版本库的暂存区;

F:\tmp\learning-git>git add readme.txt LICENSEF:\tmp\learning-git>git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   LICENSEmodified:   readme.txtF:\tmp\learning-git>

3.将暂存区内容提交,然后查询git状态,此时工作区是干净的(working tree clean)

F:\tmp\learning-git>git commit -m "understand how stage works"
[master 03dee38] understand how stage works2 files changed, 2 insertions(+)create mode 100644 LICENSEF:\tmp\learning-git>git status
On branch master
nothing to commit, working tree clean
F:\tmp\learning-git>

撤销回退和删除的基本操作

撤消修改(git commit --amend,后悔药)

有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交:
git commit --amend
示例:

$ git commit -m 'initial commit'
$ git add forgotten_file  #遗漏的文件添加上
$ git commit --amend  #再次提交
F:\tmp\learning-git>echo "forgotten_file " >forgotten_file #另一个待提交的文件F:\tmp\learning-git>type readme.txt
"switch type"F:\tmp\learning-git>echo "add a line." >>readme.txt  #修改文件内容F:\tmp\learning-git>git add readme.txt  #只添加了一个修改文件,遗漏了forgotten_fileF:\tmp\learning-git>git commit -m "initial commit"  #进行了两步提交操作,添加了提交备注
[dev 14b63f3] initial commit1 file changed, 1 insertion(+)F:\tmp\learning-git>git add forgotten_file  #补上遗漏的文件F:\tmp\learning-git>git commit --amend  #再次提交
[dev 7559bf1] initial commitDate: Tue Sep 3 23:05:07 2024 +08002 files changed, 2 insertions(+)create mode 100644 forgotten_fileF:\tmp\learning-git>

最终你只会有一个提交——第二次提交将代替第一次提交的结果。
当你在修补最后的提交时,并不是通过用改进后的提交 原位替换 掉旧有提交的方式来修复的, 理解这一点非常重要。从效果上来说,就像是旧有的提交从未存在过一样,它并不会出现在仓库的历史中。

修补提交最明显的价值是可以稍微改进你最后的提交,而不会让“啊,忘了添加一个文件”或者 “小修补,修正笔误”这种提交信息弄乱你的仓库历史

F:\tmp\learning-git>git log --graph --pretty=oneline --abbrev-commit  
* 7559bf1 (HEAD -> dev) initial commit
* af37860 add merge
* 2e4c9e1 add merge
* db8995a branch test
* 1452a8f understand how stage works
* 02d503a add distributed
* b75599d wrote a readme file

删除文件–两个场景(确认删除/误操作,已后悔)

在 Git 中,删除也是一个修改操作,我们先添加一个新文件test.txt到 Git 并且提交

F:\tmp\learning-git>echo "This is a test_file." >test.txt   #创建一个test.txt文件
F:\tmp\learning-git>dir驱动器 F 中的卷是 tmp卷的序列号是 0800-B859F:\tmp\learning-git 的目录24/09/02  下午 11:16    <DIR>          .
24/09/02  下午 11:16    <DIR>          ..
24/08/28  上午 12:47                23 LICENSE
24/08/28  上午 12:48               125 readme.txt
24/09/02  下午 11:16                25 test.txt3 个文件            173 字节2 个目录 30,000,906,240 可用字节F:\tmp\learning-git>git add test.txt   #提交到git缓存区F:\tmp\learning-git>git status  #查看提交状态
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   test.txt

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

F:\tmp\learning-git>del test.txtF:\tmp\learning-git>dir驱动器 F 中的卷是 tmp卷的序列号是 0800-B859F:\tmp\learning-git 的目录24/09/02  下午 11:22    <DIR>          .
24/09/02  下午 11:22    <DIR>          ..
24/08/28  上午 12:47                23 LICENSE
24/08/28  上午 12:48               125 readme.txt2 个文件            148 字节2 个目录 30,000,906,240 可用字节

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

F:\tmp\learning-git>git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   test.txtChanges not staged for commit:(use "git add/rm <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)deleted:    test.txt

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:

F:\tmp\learning-git>git rm test.txt
rm 'test.txt'F:\tmp\learning-git>git status
On branch master
nothing to commit, working tree clean

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

分支基本操作–创建、切换、合并、删除

通过checkout命令加参数创建一个新分支dev

F:\tmp\learning-git>git checkout -b dev
Switched to a new branch 'dev'

更新readme.txt文件内容并提交

F:\tmp\learning-git>dir驱动器 F 中的卷是 tmp卷的序列号是 0800-B859F:\tmp\learning-git 的目录24/09/02  下午 11:31    <DIR>          .
24/09/02  下午 11:31    <DIR>          ..
24/08/28  上午 12:47                23 LICENSE
24/08/28  上午 12:48               125 readme.txt2 个文件            148 字节2 个目录 30,000,906,240 可用字节F:\tmp\learning-git>echo "Creating a new branch is quick." >>readme.txtF:\tmp\learning-git>git add readme.txtF:\tmp\learning-git>git commit -m "branch test"
[dev db8995a] branch test1 file changed, 1 insertion(+)

切换到主节点master上,发现刚才提交的内容未显示,符合预期

F:\tmp\learning-git>git checkout master
Switched to branch 'master'F:\tmp\learning-git>type readme.txt
"Git is a version control system."
"\nGit is free software."
"add new line."
"Git has a mutable index called stage."F:\tmp\learning-git>

将dev分支提交内容合并到master中的操作,然后查看文件内容已同步更新,注意到此次合并的方式为快速合并Fast-forward,

F:\tmp\learning-git>git merge dev
Updating 1452a8f..db8995a
Fast-forwardreadme.txt | 1 +1 file changed, 1 insertion(+)F:\tmp\learning-git>type readme.txt
"Git is a version control system."
"\nGit is free software."
"add new line."
"Git has a mutable index called stage."
"Creating a new branch is quick."F:\tmp\learning-git>

删除分支dev,并且查看分支情况确认删除效果,*号为当前位置

F:\tmp\learning-git>git branch -d dev   
Deleted branch dev (was db8995a).F:\tmp\learning-git>git branch
* masterF:\tmp\learning-git>

切换分支的另一种方式switch

通过git switch 创建分支,并且切换,更容易理解操作意图

F:\tmp\learning-git>git switch -c dev
Switched to a new branch 'dev'F:\tmp\learning-git>git branch
* devmasterF:\tmp\learning-git>git switch master
Switched to branch 'master'F:\tmp\learning-git>git branchdev
* masterF:\tmp\learning-git>

分支管理策略–合并方式

创建一个dev分支,并在分支下通过两步提交一个内容,作为测试基础

F:\tmp\learning-git>git switch -c dev
Switched to a new branch 'dev'F:\tmp\learning-git>echo "switch type" >>readme.txtF:\tmp\learning-git>git add readme.txtF:\tmp\learning-git>git commit -m "add merge"
[dev af37860] add merge1 file changed, 1 insertion(+), 6 deletions(-)F:\tmp\learning-git>git switch master
Switched to branch 'master'

通过–no-ff的方式合并,并且查看对应日志内容(过滤输出)

F:\tmp\learning-git>git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'ort' strategy.readme.txt | 7 +------1 file changed, 1 insertion(+), 6 deletions(-)F:\tmp\learning-git>git log --graph --pretty=oneline --abbrev-commit
*   765e52f (HEAD -> master) merge with no-ff
|\
| * af37860 (dev) add merge
|/
* 2e4c9e1 add merge
* db8995a branch test
* 1452a8f understand how stage works
* 02d503a add distributed
* b75599d wrote a readme fileF:\tmp\learning-git>

分支管理的几个原则

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

其次,干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,并在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:
在这里插入图片描述

日常开发中的分支

常设分支就主分支(master)和开发分支(develop)两个即可,另外的功能分支(feature)、预发布分支(release)和维护分支(hotfix)属于临时分支,用完之后应该及时删除。

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



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

相关文章

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.