【git】学习笔记
一、git原理
- git只能跟踪文本文件的变化,比如txt文件、程序代码等。而对于图片、视频等二进制文件的变化,就无法知道变化了哪里。
- git 分支的理解:如下图所示,git分支可以理解为是一个指针以及提交历史组成。
不管git有多少分支,整个git可以理解为是一颗树(包含很多枝杈),不同的分支仅仅是对于不同枝杈的一份快照。

二、git基本操作
1、撤销修改
撤销工作区的修改,用命令git checkout -- file。撤销暂存区的修改:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。丢弃提交:已经提交了不合适的修改到版本库时,想要撤销本次提交,使用命令git reset --hard commit_id。撤销提交:git revert HEAD。在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。它不会改变过去的历史,所以是首选方式,没有任何丢失代码的风险。替换上一次提交:提交以后,发现提交信息写错了,这时可以使git commit --amend -m "",可以修改上一次的提交信息,并把暂存区有变化的文件一并提交。(相当于重新提交)
2、暂存修改
当我们在某个分支上工作进行到一半时,需要切换分支进行工作,这是我们不想提交代码,可以通过git stash命令,将工作现场“储藏”起来。
用git stash list命令可以查看储存的内容:
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge
当我们需要恢复工作现场时,使用**git stash pop**,这样在恢复的同时把stash内容也删了。
$ git stash pop
On branch dev
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: hello.py
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
Dropped refs/stash@{0} (5d677e2ee266f39ea296182fb2354265b91b3b2a)
3、复制其他分支的提交修改
比如我们在master分支上修复的bug,想要合并到当前dev分支,可以用**git cherry-pick <commit>**命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
4、标签管理
git 标签是指向与某次commit的指针的,在一些重要的代码提交上打上标签,可以帮助我们更好的识别和管理我们代码提交的历史。
- 创建标签:
git tag -a <name> - 创建带描述信息的标签:
git tag -a <name> -m <msg> - 推送一个本地标签:
git push origin <tagname> - 推送全部未推送过的本地标签:
git push origin --tags - 删除一个本地标签:
git tag -d <tagname> - 删除一个远程标签:
git push origin :refs/tags/<tagname>
三、git分支管理
在git中创建和切换分支的代价是非常小的,我们应该多用分支。
1、日常开发中使用分支策略
当我们开发时,应该根据当前任务创建一个新分支进行开发,而不是在dev分支上进行开发,开发完成后再将开发完成的分支合并到dev分支。
比如:我们接到一个新的需求:
(dev)$: git checkout -b feature/xxx # 从dev建立特性分支
(feature/xxx)$: blabla # 开发
(feature/xxx)$: git add xxx
(feature/xxx)$: git commit -m 'commit comment'
(dev)$: git merge feature/xxx --no-ff # 把特性分支合并到dev
2、解决分支合并冲突
当合并代码出现冲突时,必须解决冲突后才能继续提交。
git 使用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改好再提交即可。
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
四、git实践
1、git 分支规范
master
dev
feat/xxx
release/xxx
hotfix/xxx
每个仓库有且仅有以下的 分支:
Branch: master 、 dev 、 feat 、 release 、 hotfix
其中:
- master 受保护,不存放源代码,不直接提交代码,所有的 上线文件 需要推送到此分支。
- dev 受保护,主分支,不能直接提交代码,在这个分支只能增加从 feat 合并 过来的 commit。紧急bug除外,紧急bug处理方式看后文bugfix。
- feat 分支需要从 dev 切出,然后开发完成后,提交合并请求到 release 分支进行提测。
- release 分支需要从 dev 切出,用来对项目中各个需求进行合并提测,改 bug 等均在此分支进行,测试成功后,提交合并请求到 dev。
- hotfix 分支需要 dev 切出,待 bug 修复完成后,提交合并请求到 dev。
2、git 标签提交规范
- 对应每个发布版本的源代码 tag。tag版本号与需求版本一致,从dev分支打tag,命名 release_版本号_日期,如:release_1.0_20200426
- 对应每个发布版本的上线文件 tag。tag版本号与需求版本一致,命名 dist_版本号_日期,如:dist_1.0_20200426
3、提交规范
- type
- 用于说明 `commit` 的类别,只允许使用下面10个标识。
- feat:新功能(feature)
- fix:修补bug
- docs:文档(documentation)
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- perf:性能优化
- test:增加测试
- chore:构建过程或辅助工具的变动
- revert:回退
- build:打包
- scope(可选)
- 用于说明 `commit` 影响的范围,比如Button组件、store、首页、路由等等,视项目不同而不同。
- subject(可选))
- 是 `commit` 目的的简短描述,不超过50个字符。
- 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
- 第一个字母小写
- 结尾不加句号(.)
4、发行版提交(release)
在Github、码云等源码托管商,提供了release的概念,可以提交我们打包后的项目文件,在标签tag的基础上我们可以添加编译好的二进制文件等,如.deb、.exe等给特定的版本提供更多的信息,方便用户,也方便后期查找特定版本的程序。

【git】学习笔记的更多相关文章
- Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- Git学习笔记(10)——搭建Git服务器
本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...
- Git学习笔记(四)
一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...
- git 学习笔记6--remote & log
git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...
- Git学习笔记---协作的一般流程
一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...
- 【转帖】Git学习笔记 记录一下
本文内容参考了廖雪峰老师的博文,并做了适当整理,方便大家查阅. 原帖地址 https://wangfanggang.com/Git/git/ 常用命令 仓库初始化 - git init 1 git i ...
- [转]Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- GIT学习笔记(1):创建版本库
GIT学习笔记(1):创建版本库 创建版本库 1.创建合适目录并初始化为仓库 版本库即需要交由Git进行版本控制的目录,其下所有文件的修改.删除,Git都能跟踪还原. 说明:初始化后,当前目录下会多出 ...
- GIT学习笔记(5):变基
GIT学习笔记(5):变基rebase 变基 引入变基 在Git中整合来自不同分支的修改主要有两种方法:merge以及rebase. 整合分支最容易的方法是merge,他会把两个分支的最新快照以及两者 ...
- GIT学习笔记(4):远程分支
GIT学习笔记(4):远程分支 远程分支 远程分支是什么 远程分支是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在GIT进行网络交互时才会更新.远程分支就是书签,提醒着你上次连接远程仓 ...
随机推荐
- 使用easypoi 最原始的代码进行导出Excel
首先,产品有需求,我们苦逼的程序员就得把需求实现.那么今天咱就把产品提的导出Excel的需求给他搞定.他的需求是这样的,很简单的Excel导出.样式如图所示:. 其实我们项目中的ExcelUtils工 ...
- ie8 不支持 trim方法
那就自己写一个trim() String.prototype.trim = function() { return this.replace(/(^\s*)|(\s* ...
- 一切混乱开端的透明效果——ShaderCp8
--20.8.18 Unity中,通常用两种方法来实现透明效果 1)透明度测试 2)透明度混合 这两个分别是什么呢 1.透明度测试指的只要不符合条件(即在物体颜色中的alpha通道的值小于某一个阈值) ...
- 解决vs未能找到导入的项目
本文解决的问题: VS显示"vs未找到导入XXX.vcxproj 项目,请确认 import 声明中的路径正确". 找到 修改成非只读,打开后删除所有诸如这样的 Import 标签 ...
- CF 1020B Badge
之前写过DFS的题,但是或多或少有参考别人的思路,最近开始专攻DFS,下面这道题就是DFS练习第一题CF 1020B,之后训练完后抽时间写一篇DFS专项. B. Badge time limit ...
- TCP 异常断开连接的过程
Tcp连接正常断开的情况,大家都了解,也就是一端发送Fin报文开启四次挥手,然后 sock 结构销毁,但是我之前很少去追踪 Tcp 在对端宕机,进程 Crash 之后的行为逻辑.前段时间正巧遇到了这样 ...
- 【cs231n】knn作业笔记
完成了assignment-1中knn相关内容的作业,记录一下遇到的知识点和问题 knn.ipynb的内容大致包括: 1.数据集的建立 主要是通过切片函数,如下图选取前5000张图片和其标记作为训练数 ...
- toLua文件夹结构
写在前面 本文是我对toLua(1.0.8.591版本)文件夹内容理解的记录. 文件夹结构 总览 下图是toLua的Unity工程视图: BaseType 基础类型的Wrap文件,有些是自动生成(即用 ...
- 第七章 狄克斯特拉算法 (Dijkstra's algorithm)
步骤 找出最便宜的节点,即可在最短时间内前往的节点 对于该节点的的邻居,检查是否有前往他们的更短路径,如果有,就更新其开销 重复这个过程,知道对图中的每个节点都这样做了 计算最终路径 条件 只适用于有 ...
- Delphi注解(不是注释)
开发环境Delphi XE10 1 unit Unit1; 2 3 interface 4 5 uses 6 Winapi.Windows, Winapi.Messages, System.SysUt ...
