当前位置: 首页 > 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.xdnf.cn/news/1089883.html

相关文章:

  • git 报错fatal: refusing to merge unrelated histories
  • 城市地质大数据平台:透视地下空间,赋能智慧未来
  • 基于物联网的智能家居控制系统设计与实现
  • 从零开始的云计算生活——番外2,MySQL组复制
  • 项目进度管控缺乏闭环,如何形成反馈机制
  • 适老化HMI改造:老年用户界面的字体、触控区域优化策略
  • 想要抢早期筹码?FourMeme专区批量交易教学
  • Kubernetes 存储入门
  • Spring Boot + Vue.js 全栈开发:从前后端分离到高效部署,打造你的MVP利器!
  • NLP自然语言处理04 transformer架构模拟实现
  • 【Java SE】Arrays工具类
  • OpenCV哈希算法------Marr-Hildreth 边缘检测哈希算法
  • 字符串大小比较的方式|函数的多返回值
  • Softhub软件下载站实战开发(十六):仪表盘前端设计与实现
  • 【DOCKER】-2 docker基础
  • 车载以太网-TC8测试-UT(Upper Tester)
  • 基于物联网的智能交通灯控制系统设计
  • RAGflow图像解析与向量化分析
  • 基于模板设计模式开发优惠券推送功能以及对过期优惠卷进行定时清理
  • 文献学习|全面绘制和建模水稻调控组景观揭示了复杂性状背后的调控架构。
  • 【洛谷题单】--顺序结构(一)
  • MyBatis-Plus:深入探索与最佳实践
  • 《UE5_C++多人TPS完整教程》学习笔记42 ——《P43 瞄准(Aiming)》
  • 【Linux服务器】-安装ftp与sftp服务
  • JavaScript基础篇——第二章 类型转换与常见错误解析
  • openEuler2203sp4-vg磁盘组中剔除磁盘
  • 11款常用C++在线编译与运行平台推荐与对比
  • 【PyTorch】PyTorch中torch.nn模块的激活函数
  • 初识mysql(一)
  • Spring Bean 的生命周期