这篇随笔是在学习了廖雪峰老师的git教程之后写的总结,要看详细的基础级git介绍可以去http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

如果想看更加详细的git介绍,可以去我们的团队博客http://www.cnblogs.com/buaase/p/5066288.html

如果还想看更更加详细的git介绍,可以去百度云盘下载https://pan.baidu.com/s/1nvq46U1  提取码tpah(好像不需要提取码)

以下介绍适合使用过git但是不明白git的朋友阅读

git的基本工作原理

工作区:实际上就是自己编写文件的环境,比如我用java写一个程序,在eclipse中编写的代码就是在工作区中;就相当于我们只是取到了仓库中的文件的镜像,然后对文件修改(事实上对磁盘上的文件作了修改),我们修改文件的地方就是工作区

暂存区:类似于git的一个缓存,在一次提交中,我们可能需要添加很多个文件,于是我们将需要提交的文件一个一个add到暂存区,add完成后,我们用commit命令将刚才所有的add一次性地提交到本地仓库

本地仓库:真git真正管理文件的地方,里面所有的文件都受git的管理,文件的修改,删除,git都有记录

远程仓库:默认名称是origin,远程仓库和本地仓库类似,但是在多人合作的时候,别人能看见远程仓库却不能看见你的本地仓库,每个人也有自己的本地仓库。在多人合作的时候,远程仓库放的往往是最新的代码,就是大家都认为正确的更新才push上去的(push是提交,pull是从远程仓库获取并合并到本地)。在每次提交到远程仓库之前一般都要进行git pull,这是为了避免远程仓库和本地仓库的不一致:远程仓库可能存在其他人修改过后的代码,而你本地仓库还是以前的旧代码,这个时候就需要将远程仓库的代码同步(pull)到本地仓库(可能和本地仓库的代码存在冲突,这个时候需要解决冲突),然后再讲本地仓库的代码提交(push)到远程仓库。

  add的过程是将工作区的文件修改信息放到暂存区,commit是将暂存区的文件修改信息告诉本地仓库,本地仓库就会记录修改信息,将文件版本更新(HEAD指针的变化),pull就是将远程仓库同步到本地仓库,push就是将本地仓库的内容同步到远程仓库

git分支策略

  git branch XX可以创建分支,git checkout XX可以切换到某一个分支:XX表示分支名

  一个分支就相当于一条线,每一个分支都进行独立的开发,互不影响。

  现实中,我们往往在master上发布版本(当需要发布新版本时才会使用,平时不会在master上修改代码),新建一个dev分支进行开发:当需要不新版本时,会将dev分支上的代码和master上的代码进行合并(merge),这样dev上的代码就会更新到master分支上。

  举一个例子来说:

  我们在做数学卷子的时候,正常一点的人(除开很牛逼的和那些无所谓的)都会选择在草稿纸上进行运算,感觉运算结果正确之后才会将结果写在试卷上,最后交卷。这就和分支策略类似:我们的master分支就是试卷,发布新版本就是向广大用户交卷;我么的dev分支就是草稿纸,不管我们在草稿纸上怎么运算,都不会对我们最终的成绩造成影响,只需要将最终运算结果写在试卷上即可(事实上还是不要让你的草稿纸太乱,以免自己都看不懂);我们可以用很多草稿纸来计算(题目比较复杂的话),然后将草稿纸A上的结果写在草稿纸B上,最后才将草稿纸B上的结果写在试卷上,就像我们会有很多分支一样。

冲突:如果我们在打草稿的过程中发现我们以前写在试卷上的结果有问题,这个时候就是冲突。在我们合并分支的时候,发现dev分支和master分支上都修改了同一内容,这个时候git就不知道到底该使用哪一个分支上的内容,于是会在冲突文件上标记(HEAD字样),这个时候只需要修改冲突文件,使其成为你想要的内容,然后重新提交即可。

bug分支:当我们用某种方式发现我们的选择题有问题(当然不是“左顾右盼”),我们就需要拿出草稿纸来进行计算,验证,修改,最后写上正确答案。问题即是bug,我们在遇到bug 的时候就可以另开一个分支来进行bug修改,修改完成之后再合并分支

git的几个命令

常用的add、commit、pull、push就不介绍了

1.git checkout –filename

这里的checkout不是切换分支,而是用仓库的filename文件替换工作区的filename文件,不管是删除还是修改,都可以复原。但是这样一来就会丢弃工作区的修改,就找不回来了

2.git stash

这个命令是暂存工作区的内容,比如我们急需修改某一个bug,但是现在的工作一时半会还不能完成,这个时候就可以使用git stash将工作区的内容保存起来。等到我们处理完bug之后,切回现在的分支,然后使用git stash pop将暂存的内容pop(弹)出来。另外,我们可以使用git stash list查看现在的stash中有哪些内容

3.git log

查看当前的commit信息,每个commit信息有对于的hash码,hash码具有唯一性

4.git reset --hard

这个命令是用来在本地进行回退的,在后面加上参数,可以实现回到某一个commit的状态,参数类型有

HEAD:最近的一次commit(其实就是git log的最新的一项),HEAD指针每一次都是指向最新的commit,当回退之后是指向log的最新的一项

HEAD^:上一次commit

HEAD^:上上次commit

hash码:回到hash码对应的那一次commit,hash码可以通过git log查看,回退之后,log里面没有的commit的log可以通过git reflog查看

Git基础级介绍的更多相关文章

  1. 1、git基础介绍及远程/本地仓库、分支

    1. Git基础介绍 基于Git进行开发时,首先需要将远程仓库代码clone到本地,即为本地仓库.后续大部分时间都是基于本地仓库上的分支进行编码,最后将本地仓库的代码合入远程仓库. 1.1. 远程仓库 ...

  2. git基础介绍

    git基础介绍 这是git操作的基础篇,是以前的写的操作文档,就没有进行手打,直接把图片贴进来了,你们担待哈,有不正确的地方可以指正出来,我将在第一时间去修改,多谢哈! 一.文件状态:git系统的文件 ...

  3. 一篇长文说 git 基础

    版本管理在产品级开发中是非常重要的一个部分,它涉及到团队协作,且影响到产品最终的发布.上线以及测试环节,当前最流行的版本控制系统是 git.git 内容非常多,本文尽量克制地来介绍 git 的基础内容 ...

  4. git基础及分支

    关于版本控制 git是一种分布版本控制系统,每一主机都保存了完整副本.必杀技是分支. 在Windows可安装git客户端msysgit. git基础 第一次看progit觉得有点不懂,不懂版本控制,一 ...

  5. java 网络编程(二)----UDP基础级的示例

    下面介绍UDP基础级的代码示例: 首先了解创建UDP传输的发送端的思路: 1.创建UDP的Socket服务.2.将要发送的数据封装到数据包中.3.通过UDP的socket服务将数据包发送出去.4.关闭 ...

  6. Git详解之二 Git基础

    Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...

  7. 2.4 Git 基础 - 撤消操作

    2.4 Git 基础 - 撤消操作 撤消操作 任何时候,你都有可能需要撤消刚才所做的某些操作.接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失 ...

  8. Git详解之二:Git基础

    Git 基础 读完本章你就能上手使用 Git 了(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读).本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到 ...

  9. Git基础 —— Github 的使用

    Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 Github 的利用 Gith ...

随机推荐

  1. B. Sleepy Game

    http://codeforces.com/problemset/problem/936/B Petya and Vasya arranged a game. The game runs by the ...

  2. 单链表(c语言实现)贼详细

    直接上代码吧 #include<stdio.h> #include<malloc.h> /* 单链表特点: 它是一种动态的储存结构,链表中每个节点占用的储存空间不是预先分配的, ...

  3. PCB直角走线的影响

    PCB直角走线的影响   布线(Layout)是PCB设计工程师最基本的工作技能之一.走线的好坏将直接影响到整个系统的性能,大多数高速的设计理论也要最终经过 Layout 得以实现并验证,由此可见,布 ...

  4. vbs获取当前主机IP

    Function GetIP GetIP = ""        Dim objWMIService, colAdapters, objAdapter    strComputer ...

  5. UITableViewCell的父视图

    最近版本测试阶段,发现一个奇怪的问题,以前在A测试机上出现的崩溃bug,解决后今天在B测试机上又出现了,在B上解决完之后,返回到设备A上发现又不行了.最后调试发现是测试设备系统版本不同导致的,A设备是 ...

  6. python学习之路(1)

    今天刚入门python,对于有c和java基础的我,学习起来还是比较容易的,我并没有用PyCharm写,而是最基础的IDLE,学习python比java容易的地方就是不要写分号,不要打包,不要定义等等 ...

  7. Scala-列表操作

    package com.bigdata object ListO { def main(args: Array[String]): Unit = { println() } val list = Li ...

  8. Verilog 奇数分频

    代码: module odd_div( ); ; //分频系数,3即3分频 ; reg clk, rstn, clk_div_pos, clk_div_neg; wire clk_div_out; : ...

  9. jQuery学习-显示与隐藏

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. python基础学习1-json,pickle的序列化和反序列化

    import requests import json dic={'k1':'v1'} print(dic,type(dic)) result = json.dumps(dic)#调用dumps方法把 ...