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

相关文章

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