概述

工作中使用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. 教你如何用ps制作紫色光斑效果

    1.新建800x800画布 2.设置前景色和背景色分别为#b38adb ,#212121;执行"滤镜"-"渲染"-"云彩"操作 3.执行&q ...

  2. 将IP转换为16进制,用于IPv4-IPv6

    # --*-- coding: utf-8 --*--# create by xiaocaiji while 1: str_ip = input("input a IP:") li ...

  3. 微信支付自带的简易log

    using System; using System.Collections.Generic; using System.Web; using System.IO; namespace WxPayAP ...

  4. Trachtenberg(特拉亨伯格)速算系统

    二战期间,俄国的数学家Jakow Trachtenberg(1888-1953)被关进纳粹集中营,在狱中,他开发出了一套心算算法,这套算法后来被命名为Trachtenberg(特拉亨伯格)速算系统. ...

  5. PHP去掉html中的空行、空白函数

    function DeleteHtml($str){ $str = trim($str); $str = ereg_replace("\t","",$str); ...

  6. python 实现快排序

    def q_sort(arr): if len(arr)<2: return arr pivot = arr[0] less = [x for x in arr[1:] if x <= p ...

  7. INTERVAL YEAR TO MONTH数据类型

    INTERVAL YEAR TO MONTH数据类型 Oracle语法: INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO ...

  8. win10 64位 安装scrapy

    在学习python时,不可避免下载了Anaconda,当我打算写爬虫时,urllib,requests,selenium,pyspider都已经安装好了,可以直接使用了,但是有一天我想要使用scrap ...

  9. Appium系列文章(1)获取appPackage和appActivity

    appPackage和appActivity 进行appium自动化测试非常重要的两个参数,我们所测试的APP不同,这两个参数肯定也是不一样的.那如何快速的获取这APP的这两个参数呢? 通过cmd命令 ...

  10. go 切片的创建方式

    切片的创建方式现知道的有下面几种方式,切片为指针类型,从数组中得到的切片修改元素值时,原数组也会发生变化(数组为非指针类型) package main import "fmt" f ...