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

相关文章

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET