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

相关文章

基于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分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

【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