Git快速入门+复习笔记

对于学习编程的同志来说,学习Git是必不可少的一项技术,如果你是第一次观看我的文章,欢迎关注我的频道,我会分享更多有趣的知识。

文章目录

  • 1 目标
  • 2 概述
    • 2.1 开发中的实际场景
    • 2.2 版本控制器的方式
    • 2.3 工作流程图
  • 3 Git安装和常用命令
    • 3.1 Git环境配置
      • 3.1.2 基本配置
    • 3.2 获取本地仓库
    • 3.3 基础操作指令
  • 4 分支
    • 4.1 分支命令
    • 4.2 解决冲突
    • 4.3 开发中分支使用原则和流程
  • 5 Git远程仓库
    • 5.1 创建的托管服务
    • 5.2 配置SSH公钥
    • 5.3 远程仓库添加
    • 5.4 从远程仓库克隆
    • 5.5 从远程仓库中抓取或拉取
    • 5.6 解决合并冲突

1 目标

  • 了解Git基本概念
  • 能够概述Git的工作流程
  • 能够使用Git常用命令
  • 熟悉Git代码托管服务
  • 能够使用idea操作git

2 概述

2.1 开发中的实际场景

场景一:备份

​ 小明备份的模块快要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲,几个月来的努力付之东流。

场景二:代码还原

​ 这个项目中需要一个很复杂的功能,老王摸索了一个星期终于有眉目了,可是这被改的面目全非的代码已经回不去从前了。

场景三:协同开发

​ 类似于坚果云,但是比坚果云更好用。

场景四:代码追责

​ 项目经理带着一群程序员做开发,可是某一天出了BUG,但是没有人愿意承认,这时候找出这个写出BUG的人至关重要。

2.2 版本控制器的方式

在开始谈论版本控制器的方式之前,我们可以看一个小故事。

引用于:Git的诞生 - 廖雪峰的官方网站 (liaoxuefeng.com)

很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。

Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码。

在那时候,实际上已经出现了一些版本控制系统如CVS、SVN这些版本控制工具,但是Linus认为其并不好用,因为其是集中式版本控制系统,打个比方,集中式版本控制工具就像是去图书馆借书来做笔记,做完笔记后放回去。虽然有一些商用的版本控制系统比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。

集中式版本控制工具

集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,这个过程必须联网,个人修改后然后提交到中央版本库。所以,这和去百度网盘写笔记没啥两样。例如SVN和CVS。

image-20220125001423724

分布式版本控制工具

分布式版本控制工具没有“中央服务器”,每个人的电脑就是一个完整的版本库,这样工作的时候,无需联网,多人协作只需要各自的修改推送给对方,就能互相看到修改内容了。例如Git。

image-20220125001446110

2.3 工作流程图


3 Git安装和常用命令

本教程的git命令例子都是在Git Bash中演示的,会用到一些基本的Linux指令,这个如果不熟悉请移步Linux笔记查看。

3.1 Git环境配置

3.1.2 基本配置

  • 打开Git Bash
  • 设置用户信息
    • git config user.name "名字"
    • git config user.email "邮箱"
  • 查看配置信息
    • git config --global user.name
    • git config --global user.email

3.2 获取本地仓库

要使用Git对我们的代码进行版本控制,首先需要获得本地仓库。创建仓库的过程分为以下几个步骤:

  1. 在电脑的任意位置创建一个空目录作为我们的本地Git仓库
  2. 进入这个目录中,点击右键打开Git bash窗口
  3. 执行命令git init完成初始化工作
  4. 如果创建成功后可以在文件夹下看到隐藏的.git目录

3.3 基础操作指令

Git工作目录下对于文件的修改会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。

image-20220125075256195

如果需要由工作区上传至暂存区,那么可以用git add

如果需要由暂存区上传至本地仓库,可以用git commit

常用指令

指令功能
git log 参数查看提交日志
git add 单个文件名 | 通配符添加一个文件或多个文件的修改到暂存区
git commit -m “注释内容”提交暂存区内容到本地仓库的当前分支
git status查看当前修改的状态
git reset --hard commitID版本回退,其中commitID可以在log里面查看
git reflog查看删除
git reflog可以看到已经删除的提交记录

git log参数

参数功能
–all显示所有分支
–pretty=oneline将提交信息显示为一行
–abbrev-commit使得输出的commitld更简短
–graph以图的形式显示

如果想让仓库的某些文件不用git替我们管理,可以创建.gitignore文件,然后用vim编辑器打开添加需要忽略的文件名即可。

4 分支

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上来进行重大的bug修改,开发新的功能,以免影响开发主线。

4.1 分支命令

分支命令

命令功能
git branch查看本地分支
git branch 分支名创建本地分支
git checkout 分支名切换分支
git checkout -b 分支名创建并且切换到分支
git merge 分支名一个分支的提交可以合并到另外一个分支
git branch -d 分支名删除分支时,需要做各种检查
git branch -D 分支名不做任何检查,强制删除

4.2 解决冲突

当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:

  • 处理文件中冲突的地方
  • 将解决完冲突的文件加入暂存区
  • 提交到仓库

4.3 开发中分支使用原则和流程

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开进行重大的BUG修改,开发新的功能,以免影响开发主线。

在开发中,一般有如下分支使用远程和流程:

  • master(生产)分支

    线上分支、主分支、中小规模项目作为线上运行的应用对应的分支。

  • develop(开发)分支

    是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要合并到master分支,准备上线。

  • feature/xxxx分支

    从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。

  • hotfix/xxxx分支

    从master派生的分支,一般作为线上Bug修复使用,修复完成后需要合并到master、test、develop分支。

  • 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre(预上线分支)等等。

image-20220125092217572

5 Git远程仓库

5.1 创建的托管服务

前面我们已经知道Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等


gitHub:是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名gitHub。

Gitee(码云):是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度更快。

GitLab:是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,一般用于企业、学校等内部网络搭建git私服。

5.2 配置SSH公钥

学过Linux的都知道,SSH可以用于远程控制。码云基于SSH进行远程传输,所以配置好公钥后,大家都可以利用这个公钥互相传输东西。

生成SSH公钥

ssh-keygen -t rsa

不断回车,如果公钥已经存在,则自动覆盖。

获取公钥

cat ~/.ssh/id_rsa.pub

获取好后,如果想连接码云端的仓库,只需按下图所示:

image-20220125174734919

image-20220125174815432

此时如果想验证是否连接码云成功,可以使用ssh -T git@gitee.com指令,如果弹出确认框,输入yes即可。

5.3 远程仓库添加

这个时候想要把本地仓库和远程仓库绑定,只需输入下面的指令:

git remote add 远程仓库名,通常为origin 仓库SSH地址

如果想要查看绑定了那些远程仓库,只需:

git remote

绑定完成后,我们将本地仓库推送到远程仓库,只需:

git push -f --set-upstream 远程仓库名 本地分支名:远程分支名

如果远程分支名和本地分支名相同,则可以只写本地分支,其中-f表示强制覆盖,–set-upstream用于推送到远程仓库的同时并且建立和远端分支的关联关系。

如果想要查看本地仓库和远程仓库分支的对应关系,可以使用:

git branch -vv

第一次推得时候如果建立起分支的关系的话,后面则无需写那么长,只需写:

git push

5.4 从远程仓库克隆

如果有一个远程仓库,我们可以直接clone到本地。克隆的命令可用:

git clone 仓库路径 本地目录

其中本地目录可省略,会自动生成一个目录

5.5 从远程仓库中抓取或拉取

远程分支可以看成是本地分支,我们也可以进行merge操作,只是需要把远程仓库中最新的更新下载到本地,再进行操作。

如果只是抓取,那么其作用是把仓库中的更新都抓取到本地,不会进行合并,并且如果不指定远端名称和分支名,则抓取所有的分支,命令如下:

git fetch 远程仓库名 分支名

如果是拉取,那么会将远端仓库的修改拉到本地后自动进行合并,相当于fetch+merge,而且如果不指定远端名称和分支名,则抓取所有并更新当前分支。

5.6 解决合并冲突

在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。

A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远程仓库分支,如下图所示:

image-20220125185043272

在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并冲突。

远程分支也是分支,所以合并时冲突的解决方式也和解决本地分支冲突相同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android浏览器速度测试,Android平台浏览器网页加载速度对比评测

参与测试的浏览器手机上网已经渐渐成为人们的一种习惯,无论在等公交时、乘地铁时、吃饭等餐时,很多朋友都习惯掏出手机简单浏览一下微博、人人、新闻网站等页面。移动网络的确为我们带来了莫大的便利,但网速和稳定性却是移动网络的硬伤。针对…

操作系统随笔(一)

你好朋友,当你点进来这份读书笔记时,我相信你不是无意中点进来就是对这一部分饶有兴趣,可惜的是,我也只是个普通的大学生,有时候对知识的见解获取没有屏幕前的你那么有天赋,所以在阅读完这篇文章的同时点个…

codeforces 483B Friends and Presents 解题报告

题目链接:http://codeforces.com/problemset/problem/483/B 题目意思:有两个 friends,需要将 cnt1 个不能整除 x 的数分给第一个friend,cnt2 个不能整除 y 的数分给第二个friend。x 和 y 都是素数来的。要求求出最小的 v&#xff…

并行计算随笔(一)

如果觉得本篇文章对你有所启发,请给我点个赞好吗,这对我很重要,谢谢 文章目录1 并行计算基础1.1 什么是并行计算1.1.1 对计算速度的需求1.1.2 并行计算1.1.3 并行计算的基本条件1.1.4 平行计算和分布式计算1.2 为什么需要并行计算1.3 并行计算…

命令行的形式运行php

转自:http://www.cnblogs.com/myjavawork/articles/1869205.html 注意:在安装php时需要将php 的安装目录加到环境变量 PATH 中 (右击我的电脑->属性->高级->环境变量, 如果存在 PATH 则在原来的 PATH 中加入你的PHP安装目录, 如果不存在则新建一…

idea android 模块,IntelliJ IDEA 12 - 新的Android应用程序模块向导失败,“无法找到模块的资源目录”...

我面临的问题是一个非常简单的问题... 我无法使用IntelliJ IDEA 12来帮助我创建一个Android应用程序模块(项目)。IntelliJ IDEA 12 - 新的Android应用程序模块向导失败,“无法找到模块的资源目录”成功安装的IntelliJ IDEA 12和使IDE和二者的SDK(Java和Android设备)…

JQuery常用知识点汇总

2019独角兽企业重金招聘Python工程师标准>>> 0、JQuery的基本属性标识: $(".xxx"):标签的class属性; $("#xxx"):标签的id属性; $("xxx"): 标签名&#…

数据库杂谈(三)——关系代数

3 形式化关系查询语言 摘要:关系代数是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。在本文中,我们不仅谈论关系代数的知识点,而且还配备了对应的练习题。 文章目录3 形式化关系查询…

android native.js,Android Native与JS通信互调

写在最前:看Android最新技术总结,关注公众号:最近因为App与H5交互逻辑太乱,所以抽空梳理了下;对目前App与H5的各种交互通信做个总结,自取适合自己的交互方式。一、H5调用原生的native方法1、拦截shouldOver…

SharePoint2013 Excel导出好的代码

C#Excel操作类ExcelHelper.cs 来源:http://www.hellocsharp.com/article/67.aspx C#源码世界 发布于: 2014-09-12使用本类之前必须在本机安装了office excel组件或直接下载Microsoft.Office.Interop.Excel.dll文件引用到项目目录下: 然后复制…

基于PMOS的电源防反接电路

如下图所示,是来自TI的参考设计TIDA-00982中的一个电路,功能主要是防止输入反接,R6和C6形成吸收回路,可以对上电过冲有一定的抑制作用。电源正常接入时,PMOS导通,给负载供电,由于VDS的存在&…

计算机组成原理随笔(一)

1 计算机体系结构 计算机革命发展得非常快速,以至于使用老式计算机的很多电影现在看起来十分有年代感,有的电影甚至无法预料后来的计算机是什么样的。 计算机各个组成部分的技术发展非常不均衡,各部分性能差异非常大。在计算机的发展前期&a…

Mongo读书笔记1 -- GridFS

一个Mongo文档最大4M. GridFS不依赖于MongoDB, 其他符合规范的驱动都可以访问它。 GridFS包含两部分:一部分存储文件名和其他metadata; 另一部分存储实际的文件,通常分成一个个大小为256k的小块。 这两个部分通常被命名为files和chunks,在fs命名空间下&a…

简单搭建一个SSM项目(一)

简单搭建一个用户管理的SSM项目框架,虽然也能用servletjdbc搭建更简单的,不过个人感觉工作中更多用的ssm框架项目,这里就简单用ssm来搭建需要的项目吧。 准备工具:eclipse、jdk1.7、Mysql、maven、tomcat。(请先确定计…

android wp主题,WP桌面:win10系统的最佳替代安卓应用

WP桌面是信壹网络继刷机大师、ROOT大师和安卓清理大师后重点开发的一款仿windows phone风格的手机桌面应用,从2012年推出至今已获得海内外千万粉丝的好评。这个基于Android开发的手机桌面,这不仅仅体现了WP桌面良好的用户体验,同时也从侧面反…

数据结构杂谈(三)

本文的所有代码均由C编写 如果你已经看完这篇杂谈,你可以前往上一篇杂谈→数据结构杂谈(二)_尘鱼好美的小屋-CSDN博客 3 单链表 文章目录3 单链表[toc]3.1 单链表的定义3.1.1 引入2.1.2 单链表和顺序表的优劣2.1.3 单链表的代码定义3.2 单链表的初始化3.…

Mac Book Pro不能识别移动硬盘

2019独角兽企业重金招聘Python工程师标准>>> 今天把一台Mac Book Pro重装了一下系统,然后想把移动硬盘上的资料考入电脑,发现插上移动硬盘电脑没有反映。马上搜索解决办法,众说纷纭。因为没重装之前是好的,所以判断为软…

数据库杂谈(四)——关系演算和E-R数据模型

文章目录3 形式化关系查询语言3.2 关系演算和E-R数据模型3.2.1 概述3.2.2 元组关系演算3.2.2.1 概述3.2.2.2 形式化定义3.2.2.3 表达式的安全性3.2.3 域关系演算3.2.4 关于关系演算的习题3.2.5 对传统数据模型的评价3.2.6 E-R数据模型3.2.6.1 基本概念3.2.6.2 E-R图3.2.7 题型总…

小程序获取微信用户绑定的手机号

小程序API内提供getPhoneNumber借口来获取用户已经绑定到微信的手机号,但需要用户主动触发才能发起获取手机号接口&#xff0c;所以该功能不由 API 来调用; 基本流程如下: 使用方法 需要将 <button> 组件 open-type 的值设置为 getPhoneNumber&#xff0c;当用户点击并同…

华为正式发布鸿蒙多久可以用,华为正式发布鸿蒙OS,手机随时能用

8月9日下午&#xff0c;华为在松山湖召开了HDC2019开发者大会&#xff0c;而在此次大会上华为正式发布了传说中的华为鸿蒙系统&#xff0c;也就是Harmony OS。鸿蒙系统它是一个基于微内核的全新全长近分布式的操作系统&#xff0c;它不仅仅局限于某一个设备使用而是可以在其智慧…