当前位置: 首页 > news >正文

Git基本操作1

Git 是一款分布式版本控制系统,主要用于高效管理代码版本和团队协作开发。它能精确记录每次代码修改,支持版本回溯和分支管理,让开发者可以并行工作而互不干扰。通过本地提交和远程仓库同步,Git 既保障了代码安全,又实现了多人协作开发,同时支持离线工作,是现代软件开发中不可或缺的工具。

比如下面的场景:在学校中,你的老师要求你写一个的文档。你奋笔疾书地写下了第一版并且交给了老师,但老师不满意,认为还有改进的地方,于是你在这个第一版的word文件上直接进行覆盖式的修改,得到的第二版交给了老师,老师仍然觉得不满意,于是第三版,第四版......当你把最终版交给老师之后,老师来一句“我觉得还不如你的第一版,就要第一版吧!”。这时你崩溃了,因为你修改的时候是直接在原来版本的基础上直接进行修改的,根本没有保存以前的版本,拿不出来第一版。

这种情况就会让人很难受,因为你基本没有办法恢复出第一版,所以就有了Git,来记录每次的修改及版本迭代的一个管理系统。

1、认识工作区、暂存区、版本库

比如我们在当前目录下创建一个ReadMe文件。

 当前目录下的.git就是版本库,或者说真正的仓库,ReadMe所在的位置就是工作区。

图示为:

暂存区也被称为索引,是版本库的一部分。目前情况下,Git能否管理ReadMe文件?

答案是不能的

        在建立的仓库的工作区中进行一次add,文件的修改信息(包括新增,修改,删除)就会在保存在stage的暂存区中,再对该文件进行commit操作就会将文件信息提交到master分支,也就是本地仓库,对应的还有个概念是远程仓库,远程仓库就是我们在Gitee中创建的仓库,可以克隆到本地仓库。        

        修改的工作区内容会写入对象库的一个新的git对象中。

2、添加文件

可一次提交一个文件,多个文件或所有文件。

git add ReadMe
git commit -m "描述"
git add file1 file2
git commit -m "描述"
git add .
git commit -m "描述"

一个文件:

多个文件:

查看git日志命令:

git log
git log --pretty=oneline

上面的两个都可以,第二个显示的更加简洁:

3、修改文件

git追踪管理的其实是修改,而不是文件

使用git diff查看暂存区和工作区的差异,例如:在ReadMe中添加了hello git,使用git status就能查看到当前被修改的文件:

使用git diff 文件名:

git diff 文件名

该命令用来显示暂存区和工作区文件的区别:

最下面的绿色字体就是新增的内容。这样就能看到做了什么修改,可以大致检查一下再提交,就会放心很多。

4、版本回退

git reset [--soft | --mixed | --hard] [HEAD]

使用git reset进行版本回退,要注意的是主要有三个地方的可能回退,工作区、暂存区、版本库;工作区的内容修改后进行add才会保存到暂存区,经过commit后才会保存到版本库。

--soft 只会回退版本库的内容;

--mixed 会回退版本库和暂存区的内容;也是git的默认选项;

--hard 会回退所有的内容,这个要慎用,因为工作区的也被回退,可能你写了很多代码,没有保存时使用了这个,那么所有的内容都会被回退,这样就会导致你所写的代码全部不在了。

HEAD选项表示回退到当前版本库的版本,也就是回退到当前版本。 

git reflog

这个命令可以查看变更历史,找到对应版本的对象ID,通过该ID可以回退到指定的版本,是 Git 本地数据恢复的关键工具。

5、撤销修改

版本库中的代码经过git push 可以推送到远程仓库;远程仓库的代码才是自己真正用的,所以要保证远程仓库的代码正确性,就有了撤销操作:目的就是不影响远程仓库的代码。

6、删除文件

删除后再add和commit,也就是现在工作区中删除,再在暂存区中删除,最后在版本库中删除。

这两个命令可以合并成一个命令,git rm [filename]

git rm [filename]

这个命令帮我们同时做了两件事,首先在工作区中删除,其次在暂存区中删除,所以我们为了方便,一般会用这个命令进行删除。

http://www.dtcms.com/a/271713.html

相关文章:

  • 【C++】第四章—— 函数重载 Function Overloading 笔记
  • 2、Unity插件整合
  • 智慧物流管理:动作识别与包装检测的协同突破
  • 射频信号(大宽高比)时频图目标检测anchors配置
  • SpringBoot实现MCP
  • 【Linux网络编程】Socket - TCP
  • 【通识】NodeJS基础
  • LLaMA 学习笔记
  • Java 多态详解:从原理到实战,深入理解面向对象编程的核心特性
  • C#基础篇(09)结构体(struct)与类(class)的详细区别
  • Vue响应式原理三:响应式依赖收集-类
  • 大模型的下半场:从工具到智能体的产业变革与2025突围之路
  • AI大模型:(二)4.2 文生图训练实践-真人写实生成
  • 8.2 文档预处理模块(二)
  • 学习笔记(31):matplotlib绘制简单图表-直方图
  • UNet改进(19):基于残差注意力模块Residual Attention的高效分割网络设计
  • 编译安装的Mysql5.7报“Couldn‘t find MySQL server (mysqld_safe)“的原因 笔记250709
  • 主流大模型Agent框架 AutoGPT详解
  • 软件互联网产品发版检查清单
  • WIndows 编程辅助技能:格式工厂的使用
  • Dify教程更改文件上传数量限制和大小限制
  • JVM 调优
  • 双指针-15.三数之和-力扣(LeetCode)
  • AI技术如何重塑你的工作与行业?——实战案例解析与效率提升路径
  • gdb调试工具
  • Lingo软件学习(一)好学爱学
  • DPDK graph图节点处理框架:模块化数据流计算的设计与实现
  • dify配置邮箱,密码重置以及邮箱邀请加入
  • 【Java】【字节面试】字符串中 出现次数最多的字符和 对应次数
  • HTML应用指南:利用GET请求获取全国山姆门店位置信息