git知识整理
概述
工作中使用git进行代码托管,一开始只知道git add commit,之后了解了git-flow插件,觉得超牛逼,一键生成feature分支,再后来听说原生git命令更好用,于是又去学了原生git命令。
看了下git官方文档,记录下学习的心得。
基本介绍
git分为未跟踪区,跟踪区和暂存区。
文件一般都存放在未跟踪区,修改后的文件也存放在未跟踪区。
我们熟知的git add命令会把修改提交到跟踪区。值得一提的是,我们一般使用git add .来提交所有改动,也可以使用git add path/to/file来提交某个文件的改动,还可以用正则来提交某个文件夹里面的所有文件的改动。
接下来是git commit命令,它会把跟踪区的文件放进暂存区里面。值得一提的是,可以利用git commit -amend来合并这次和上次的提交。
最后是git push origin branch命令,它会把暂存区的文件上传到远程仓库,并且把本地的这些文件重新放进未跟踪区。
查看指令
有几个查看指令是经常用到的。
git status。用来查看当前git分支的状态。这个经常用到。
git diff --cached。用来查看暂存区的文件和远程服务器的文件有什么不同。
git log。用来查看提交历史。
需要注意的是,输入上面某些命令后不能输入命令行了,这时需要点击q来重新回到命令行。
分支
git在分支管理上面非常智能和高效。它并没有把所有分支复制在本地,而是使用指针来进行分支切换。
比如说,我们在master主分支上创建一个develop分支,那么git不会傻傻的重新复制一份master分支的内容,而是创建一个叫develop的指针指向master指针指向的分支,然后把当前项目的指针head指针指向develop。所以新建分支操作只是新建指针并调整指针的指向而已。
再比如说,我们再本地对master进行开发,提交了开发内容,并且push到了远程服务器。这个时候也没有发生复杂耗时的文件复制过程,仅仅只是把master指针指向了当前修改的分支而已。所以,修改和提交操作也只是调整指针的指向而已。
这就是git很快的原因。
通过上面的例子我们可以看到:
git checkout -b branch命令能超级迅速的创建并切换新分支。并且,git checkout branch命令能超级迅速的切换新分支,同时切换本地内容。
git branch -a 能够查看本地和远程的所有分支。并且,git branch能够查看本地的所有分支。
值得一提的是,如果我们由于各种各样的原因,不小心在develop或者master分支上做了改动,我们怎么撤销呢?使用git stash命令暂存所有改动即可;然后用git stash list查看暂存的stash清单;利用git stash apply使用某个stash;如果不需要还可以用git stash drop命令删掉暂存的所有stash。
git flow
业界有一套规范的git开发工作流规范。
- master分支。稳定分支,所有经过测试后的分支才能merge进master分支。所有的tag也都在master分支上进行。
- develop分支。开发分支,所有的开发工作需要先测试ok后合并到develop分支。
- feature分支。特性分支,为了开发新特性而从develop分支拉下来的一个分支。开发完成后合并到develop分支。
- release分支。提测分支,专门进行提测的分支,测试完毕后该分支会合并到develop或者master分支。
需要注意的是,对于小项目,有时候没有release分支,直接在feature分支上面提测。另外,feature分支是一个文件夹形式的,里面有很多各种特性的分支,比如feature/href分支等等。
冲突
- git fetch会拉取远程服务器上的数据到本地,但不会覆盖。
- git merge会在文档里面显示出所有的冲突,以供解决。解决完成后只需要正常的git add和git commit即可。
- git pull会同时执行git fetch 和 git merge,并且覆盖掉远程服务器的数据。
值得注意的是,git merge之后非常方便修改冲突,只需要删掉不要的代码即可。删掉不要代码之后的最终代码回覆盖掉远程服务器上的代码。
变基
git rebase待续。
git知识整理的更多相关文章
- 工具篇之GIT知识整理(一)
目录 项目工具篇(一)GIT 说在前面 背景 与其他版本控制产品对比 Git下载地址及安装 下载地址 安装 在案例中简单使用Git命令 git clone git log git diff git c ...
- Git知识总览(四) git分支管理之rebase 以及 cherry-pick相关操作
上篇博客聊了<Git知识总览(三) 分支的创建.删除.切换.合并以及冲突解决>,本篇博客我们主要来看一下 rebase 变基相关的操作.rebase 操作和 merge 操作最终都可以达到 ...
- Salesforce知识整理(一)之Lightning Web Component Tools
目录 LWC知识整理(一) 工具 Salesforce CLI Visual Studio Code(VS Code) Developer Hub(Dev Hub) 开启Dev Hub 相关资料 茶余 ...
- Git知识总结
Git知识总结 Git安装 windows 在git官网中下载安装程序,然后按默认选项安装即可 安装完成后,在开始菜单里找到"Git"->"Git Bash&quo ...
- js事件(Event)知识整理
事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下 鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...
- Kali Linux渗透基础知识整理(四):维持访问
Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...
- Kali Linux渗透基础知识整理(二)漏洞扫描
Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...
- wifi基础知识整理
转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...
- 【android Studio】零git知识、零脚本命令,即刻体验git版本管理魅力!
git的优点就不去多说了.阻碍咱新手体验它的唯一问题就是门槛太高,脚本看着像天书, 本文主要阐述的,就是如何在android studio上,也能像tfs那样,非常简单的操作,就能使用git进行版本管 ...
随机推荐
- VUEX报 “was assigned to but it has no setter”
如果有当前的变量(VUEX声名的)会发生改变的(change),刚绑定的值需要在data () 内进行声明 一个新的变量进行处理.
- 现代编译原理——第二章:语法分析之LL(K)
转自: http://www.cnblogs.com/BlackWalnut/p/4472122.html LL(K)语法分析技术是建立在预测分析的技术之上的.我们先来了解预测分析技术.考虑以下文法: ...
- .net webapi 接收 xml 格式数据的三种情况
webapi 接收 xml 的三种方法 前段时间接到一个任务写一个小接口,要接收java端返回过来的短信xml数据. 刚拿到项目,我的第一想法是对方会以什么形式发送xml格式的数据给我呢,设想三种情况 ...
- abp 设置默认语言为中文
abp 设置默认语言为中文 abp的默认语言设置,存放于数据库表AbpSettings中,这样配置可使默认语言为中文: name: Abp.Localization.DefaultLanguageNa ...
- MySQL远程连接问题解决方法
问题:Host 'XXX' is not allowed to connect to this MySQL server. 原因分析: 1.登录到mysql: 在开始目录下管理员身份运行[MySQL ...
- Trachtenberg(特拉亨伯格)速算系统
二战期间,俄国的数学家Jakow Trachtenberg(1888-1953)被关进纳粹集中营,在狱中,他开发出了一套心算算法,这套算法后来被命名为Trachtenberg(特拉亨伯格)速算系统. ...
- cobbler自动装机服务简介与配置
cobbler简介 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等. Cobbler可以使用命令行 ...
- 【信号与线性系统】为什么求解零输入响应时转移算子H(p)不能约分,但计算单位冲激响应时却可以约分?
为什么求零输入响应rZI时转移算子H(p)不能约分? . . . 我们知道,求零输入响应rZI的实质其实是求解微分方程 D(p)r(t) = N(p)e(t) 的解.由于这里 e(t)=0 ,所以这是 ...
- Python 打印矩形、直角三角形、等腰三角形、菱形
# 1)打印一个星号 print('*') #2)打印一行6个星号 * * * * * * for i in range(6): print('*',end=' ') #3)打印6列星号 * * * ...
- Python的条件判断语句------if/else语句
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户的年龄,根据年龄打印不同的内容... Python程序中,能让计算机自己作出判断的语句就是if语句: 例: age = 25 ...