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

Git 学习笔记

这篇笔记记录了我在git学习中常常用到的指令,方便在未来进行查阅。此篇文章也会根据笔者的学习进度持续更新。

网站分享

Git 常用命令大全

Learn Git Branching

基础

$ git init     //在当前位置配置一个git版本库

$ git add <file>     //将文件添加至暂存区

$ git add .          //将文件夹中的所有内容添加至暂存区

$ git commit         //将暂存区的内容提交至库中

$ git commit -m "<注释内容>"     //提交的同时添加注释(即提交信息)

$ git status    //查看暂存区中的内容

$ git log    //查看提交记录

其实每一个提交记录都可以看作一个“快照节点”,像一个相片一样记录的当前库内容的所有细节,方便我们恢复到对应提交节点的内容。

每一个这样的节点对应一个又长又复杂的哈希值,用来索引这些提交。

这个过程中可能会进入Vim编辑器,在按下ESC后切换至命令行模式,输入“:wq”即可保存并退出。

git log展示是可能会进入less分页器,按下q键即可退出。

分支

在我们的提交树中,总是有一个名为HEAD的指针指向我们的提交,其所指的地方常常使我们指令所作用的地方。HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。

$ git branch      //展示所有分支,带*的是HEAD所在的位置

$ git branch <branch_name>      //创建分支,默认为当前提交上

$ git branch <branch_name> <hash>      //在指定提交节点上创建分支

$ git branch -d <branch_name>      //将分支删除

$ git branch -f <branch_name> <hash>       //将分支强制移动到某提交上

其实HEAD的实质也是一个哈希值,一般在需要用到哈希值时,可以使用相对位置。如HEAD~就是HEAD的父提交节点。HEAD~2就是父的父。HEAD^就是父。HEAD^2是第二个父(多个父节点时)。在使用merge合并两个分支后,“将目标分支并入当前分支”的“当前分支”就是第一个父parent,“目标分支”就是第二个父,即^2。

$ git merge <branch_name>      //将目标分支并入当前分支(多条路径)

$ git rebase <branch_name>      //将目标分支嵌入当前分支(一条路径)

$ git rebase <branch_name_1> <branch_name_2>  //将分支1嵌入分支2

在并入分支时可能会产生冲突,命令行中显示“MERGING”的字样,这是需要手动在对应文件做出更改,然后再通过add指令和commit指令重新提交。

$ git checkout <branch_name>/<hash>        //将HEAD移动至目标提交(检出)

$ git checkout -b <branch_name>        //创建新分支并检出,即HEAD到此分支上

$ git reset <hash>         //真撤销

$ git revert <hash>        //假撤销,相当于是做了一个回到上一提交的提交

$ git log --oneline --graph --decorate --all      //可视化查看提交树

修改提交

$ git commit --amend          //可以修改提交信息,可通过该命令添加遗漏文件

$ git commit --amend -m "<新的提交信息>"        //直接修改提交信息

$ git cherry-pick <hash>        //将对应的提交节点复制为新的提交节点

$ git cherry-pick <hash1> <hash2>        //依次生成新创建,<hash>可以是分支或HEAD

$ git rebase -i <hash>          //修改范围内的提交

这个指令会让我们进入Vim编辑器,此时按下“i”、“a”、“s”进入编辑模式,按ESC退出该模式。在编辑模式可以对各个节点进行替换删除等操作,将每个提交前的“pick”替换为其他指令可以产生对应的效果,这些指令都写在下方的注释中。

标签

因为分支是需要我们不断操作移动的,而不是固定在某一提交上的,所以就需要用“标签”来标识重要的提交。标签的内容通常就是版本号,格式一般为 [ v <主版本号> . <次版本号> . <修订号> ] ,修订号的更新通常是修复了某些bug或者优化了某些内容,次版本号更新会添加一些功能但与老版本兼容,主版本号通常用于重大更新,调整范围较大,新老版本不兼容。一般非正式发布的都采用v0.x.x,第一个正式发布的项目一般为 v1.0.0 。

$ git tag          //查看所有标签

$ git tag <tag_name>        //默认在HEAD提交节点上添加标签(无注解,称为轻标签)

$ git tag -a <tag_name>         //启用编辑,添加注解(称为注解标签)

$ git tag -am "<注解>" <tag_name>        //创建标签的同时添加注解(-m用于编辑信息)

$ git tag <tag_name> <hash>        //指定提交节点

$ git tag -d <tag_name>        //删除标签

$ git describe           //描述离默认的HEAD最近的标签信息,只能描述注解标签

$ git describe <hash>       //描述离目标提交最近的标签信息

小结

这篇文章将会作为动态笔记记录,我将把我在日常开发中可能用到的指令更新在这里,方便查阅与使用。

如有补充纠正欢迎留言。


http://www.mrgr.cn/news/98571.html

相关文章:

  • 鸿蒙系统开发状态更新字段区别对比
  • Hyperledger Fabric(JAVA)快速工程化部署
  • Redis + Caffeine打造超速两级缓存架构
  • ROS IkFast运动学插件
  • 半导体设备通信标准—SECS协议包含哪些协议,分别都有什么作用,又都有什么分别
  • 原子操作CAS(Compare-And-Swap)和锁
  • 软件测试——BUG概念
  • android11 DevicePolicyManager浅析
  • Materials Studio学习笔记(一)——Materials Studio软件介绍
  • 系统分析师(六)-- 计算机网络
  • 音视频之H.265/HEVC编码框架及编码视频格式
  • 深度学习之微积分
  • Git_获取GitLab的token方法(访问令牌)
  • ES DSL 常用修改语句
  • 三、The C in C++
  • MyBatis持久层框架
  • uniapp的通用页面及组件基本封装
  • 基于Espressif-IDE的esp32开发
  • 第 2 篇:快速上手 Framer Motion(实操入门)
  • 从0到1构建企业级消息系统服务体系(一):产品架构视角下的高并发设计与动态响应能力建设