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> //描述离目标提交最近的标签信息

小结

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

如有补充纠正欢迎留言。

相关推荐
wahkim几秒前
Flutter 学习资源及视频
学习
摇滚侠10 分钟前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 属性优先级 行内写法 变量选择 笔记42
java·spring boot·笔记
摇滚侠14 分钟前
Spring Boot 3零基础教程,WEB 开发 Thymeleaf 总结 热部署 常用配置 笔记44
java·spring boot·笔记
小龙报20 分钟前
《算法每日一题(1)--- 连续因子》
c语言·开发语言·c++·windows·git·算法·visual studio
小白要努力sgy37 分钟前
待学习--中间件
学习·中间件
rechol43 分钟前
汇编与底层编程笔记
汇编·arm开发·笔记
~无忧花开~1 小时前
CSS学习笔记(五):CSS媒体查询入门指南
开发语言·前端·css·学习·媒体
吴鹰飞侠1 小时前
AJAX的学习
前端·学习·ajax
我的xiaodoujiao2 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 19--测试框架Pytest基础 3--前后置操作应用
python·学习·测试工具·pytest
lzj_pxxw2 小时前
嵌入式开发技巧:舍弃标志位,用宏定义函数实现程序单次运行
笔记·stm32·单片机·嵌入式硬件·学习