概述

工作中使用git进行代码托管,一开始只知道git add commit,之后了解了git-flow插件,觉得超牛逼,一键生成feature分支,再后来听说原生git命令更好用,于是又去学了原生git命令。

看了下git官方文档,记录下学习的心得。

基本介绍

git分为未跟踪区跟踪区暂存区

文件一般都存放在未跟踪区,修改后的文件也存放在未跟踪区。

  1. 我们熟知的git add命令会把修改提交到跟踪区。值得一提的是,我们一般使用git add .来提交所有改动,也可以使用git add path/to/file来提交某个文件的改动,还可以用正则来提交某个文件夹里面的所有文件的改动。

  2. 接下来是git commit命令,它会把跟踪区的文件放进暂存区里面。值得一提的是,可以利用git commit -amend来合并这次和上次的提交。

  3. 最后是git push origin branch命令,它会把暂存区的文件上传到远程仓库,并且把本地的这些文件重新放进未跟踪区。

查看指令

有几个查看指令是经常用到的。

  1. git status。用来查看当前git分支的状态。这个经常用到。

  2. git diff --cached。用来查看暂存区的文件和远程服务器的文件有什么不同。

  3. git log。用来查看提交历史。

需要注意的是,输入上面某些命令后不能输入命令行了,这时需要点击q来重新回到命令行。

分支

git在分支管理上面非常智能和高效。它并没有把所有分支复制在本地,而是使用指针来进行分支切换。

  1. 比如说,我们在master主分支上创建一个develop分支,那么git不会傻傻的重新复制一份master分支的内容,而是创建一个叫develop的指针指向master指针指向的分支,然后把当前项目的指针head指针指向develop。所以新建分支操作只是新建指针并调整指针的指向而已。

  2. 再比如说,我们再本地对master进行开发,提交了开发内容,并且push到了远程服务器。这个时候也没有发生复杂耗时的文件复制过程,仅仅只是把master指针指向了当前修改的分支而已。所以,修改和提交操作也只是调整指针的指向而已。

这就是git很快的原因。

通过上面的例子我们可以看到:

  1. git checkout -b branch命令能超级迅速的创建并切换新分支。并且,git checkout branch命令能超级迅速的切换新分支,同时切换本地内容。

  2. git branch -a 能够查看本地和远程的所有分支。并且,git branch能够查看本地的所有分支。

值得一提的是,如果我们由于各种各样的原因,不小心在develop或者master分支上做了改动,我们怎么撤销呢?使用git stash命令暂存所有改动即可;然后用git stash list查看暂存的stash清单;利用git stash apply使用某个stash;如果不需要还可以用git stash drop命令删掉暂存的所有stash。

git flow

业界有一套规范的git开发工作流规范。

  1. master分支。稳定分支,所有经过测试后的分支才能merge进master分支。所有的tag也都在master分支上进行。
  2. develop分支。开发分支,所有的开发工作需要先测试ok后合并到develop分支。
  3. feature分支。特性分支,为了开发新特性而从develop分支拉下来的一个分支。开发完成后合并到develop分支。
  4. release分支。提测分支,专门进行提测的分支,测试完毕后该分支会合并到develop或者master分支。

需要注意的是,对于小项目,有时候没有release分支,直接在feature分支上面提测。另外,feature分支是一个文件夹形式的,里面有很多各种特性的分支,比如feature/href分支等等。

冲突

  1. git fetch会拉取远程服务器上的数据到本地,但不会覆盖。
  2. git merge会在文档里面显示出所有的冲突,以供解决。解决完成后只需要正常的git add和git commit即可。
  3. git pull会同时执行git fetch 和 git merge,并且覆盖掉远程服务器的数据。

值得注意的是,git merge之后非常方便修改冲突,只需要删掉不要的代码即可。删掉不要代码之后的最终代码回覆盖掉远程服务器上的代码。

变基

git rebase待续

git知识整理的更多相关文章

  1. 工具篇之GIT知识整理(一)

    目录 项目工具篇(一)GIT 说在前面 背景 与其他版本控制产品对比 Git下载地址及安装 下载地址 安装 在案例中简单使用Git命令 git clone git log git diff git c ...

  2. Git知识总览(四) git分支管理之rebase 以及 cherry-pick相关操作

    上篇博客聊了<Git知识总览(三) 分支的创建.删除.切换.合并以及冲突解决>,本篇博客我们主要来看一下 rebase 变基相关的操作.rebase 操作和 merge 操作最终都可以达到 ...

  3. Salesforce知识整理(一)之Lightning Web Component Tools

    目录 LWC知识整理(一) 工具 Salesforce CLI Visual Studio Code(VS Code) Developer Hub(Dev Hub) 开启Dev Hub 相关资料 茶余 ...

  4. Git知识总结

    Git知识总结 Git安装 windows 在git官网中下载安装程序,然后按默认选项安装即可 安装完成后,在开始菜单里找到"Git"->"Git Bash&quo ...

  5. js事件(Event)知识整理

    事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下   鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...

  6. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  7. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  8. wifi基础知识整理

    转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...

  9. 【android Studio】零git知识、零脚本命令,即刻体验git版本管理魅力!

    git的优点就不去多说了.阻碍咱新手体验它的唯一问题就是门槛太高,脚本看着像天书, 本文主要阐述的,就是如何在android studio上,也能像tfs那样,非常简单的操作,就能使用git进行版本管 ...

随机推荐

  1. 利用Crosstool-ng制作交叉编译工具链

    1.什么是crosstool-ng crosstool-ng,全称是crosstool Next Generation,即下一代crosstool,即crosstool的升级版.那么什么是crosst ...

  2. 浏览器标签栏logo添加

    在<head > 中引入link,如下: <head> <link rel="icon" type="image/icon" hr ...

  3. APP支付(.NET版)

    ---恢复内容开始--- APP支付(.NET版) 一.   支付宝支付 1. 有一个支付账号,在蚂蚁金服开放平台中登录账号→选择“管理中心”→在“开发者中心”下选择“网页&移动应用”→然后按 ...

  4. linux jdk 环境变量

    一.jdk的安装 1.下载 jdk-7u79-linux-i586.tar.gz 2.tar -zxvf jdk-7u79-linux-i586.tar.gz  解压 3.mv jdk1.7.0_79 ...

  5. Unity - Photon PUN 本地与网络同步的逻辑分离 (二)

    上篇实现了事件系统的设计,这篇就来结合发送RPC消息 并且不用标记 [PunRPC] 先来看下上编的代码 GameEnvent.cs private static Dictionary<Comm ...

  6. Jquery源码学习日记(1)

    https://jquery.com/  最新源码下载链接:jquery3.0 135-231定义了一些jquery的通用方法 233-301行定义了一些继承的方法 302-477定义了一些工具类方法 ...

  7. CentOS 7 下安装oracle 11g碰到的一些问题

    OUI预检查时会报错,安装时会报两个不符合项目 1 compat-libstdc++ 提示未安装 奇怪这个,yum install compat-libstdc++ 老是提示找不到包,其实正确的安装方 ...

  8. ESP8266擦除工具完整安装

    ESP8266擦除工具完整安装 一.  ESP8266擦除工具路径:http://down.liangchan.net/ESP8266%B2%C1%B3%FD%B9%A4%BE%DF%CD%EA%D5 ...

  9. (摘录)Java 详解 JVM 工作原理和流程

    作为一名Java使用者,掌握JVM的体系结构也是必须的. 说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java ...

  10. linux修改用户id,组id

    一.修改用户uid usermod -u foo 二.修改用户gid groupmod -g 2005 foo usermod -g 2005 foo 三.检查 cat /etc/passwd su ...