git的产生背景

很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比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了。

git 的安装

本文使用的是win7平台。 Git可以在LinuxUnixMacWindows这几大平台上安装了,可以根据自己的操作系统去官网下载。

git 常见命令

介绍命令之前先来张图吧,所有的命令都是围绕张图的

  • Workspace:工作区,就是你平时存放项目代码的地方

  • Index / Stage:暂存区,用于临时存放文件的改动,事实上它只是一个文件,保存即将提交到文件列表信息。

  • Repository:本地仓库区(或版本库),就是安全存放数据的位置,这里面有我们提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。

  • Remote:远程仓库,托管代码的服务器。弄清楚上面四个概念,我们就开始实操吧。

  • 通过 git init 命令创建Git可以管理的仓库(本地库初始化)


Administrator@XCRBHXD05IEZEVS MINGW64 /d
$ mkdir gitstudyAdministrator@XCRBHXD05IEZEVS MINGW64 /d
$ cd gitstudy/Administrator@XCRBHXD05IEZEVS MINGW64 /d/gitstudy
$ git init
Initialized empty Git repository in D:/gitstudy/.git/

执行完这个命令我们可以看到文件下面会多一个.git的文件夹,以后在这个文件夹下(工作区)的都可以被git管理了。

  • git add 命令把文件添加到暂存区。下面我们创建(echo >文件名字)一个demo.txt文件

$ echo > demo.txt

此时的demo.txt文件是带个蓝色的,当我们执行git add - demo.txt那如果这个目录下面有几百个文件都要加到暂存区怎么办?此时可以使用git add . 这个命令可以把当前目录下所有文件加入暂存区

  • git status 查看显示工作区暂存区的状态。

$ git status
  • git commit -m"提交信息描述" 命令把文件添加到本地仓库

$ git commit -m"第一次提交"
[master (root-commit) 22f0a2b] 第一次提交1 file changed, 1 insertion(+)create mode 100644 demo.txt

提交后demo.txt颜色是不是变绿了。

  • git commit -am"文件描述" 【am】 就是 【add modify】 两个命令的合并。比如我们修改了两个文件demo.txt和demo1.txt。这时候我们可以直接使用git commit -am命令

git commit -am"第三次提交"

如果新增了文件,必须使用分开的命令,不能用合并命令。

git add .
git commit -m 'update'

回退

未使用git add(文件必须是commit 过的)
  • 使用git checkout -- filename(文件名)注意中间有--

$ git checkout -- demo.txt
  • 回退所有的文件修改使用git checkout .

 git checkout .
已使用git add,未使用git commit
  • 使用 git reset HEAD filename(指定文件名)

git reset HEAD demo.txt
  • 回退所有文件修改 git reset HEAD

 git reset HEAD

在使用本命令后,本地的修改并不会消失,而是回到了上面 未使用git add 缓存代码,继续使用用git checkout -- filename,就可以放弃本地修改。

已使用 git commit 未push
  • git reset --hard HEAD^ 回退到上一次commit的状态(这个命令需谨慎执行)。HEAD^(代表上一次)或者通过git reset --hard <commitid>(是版本号 可以根据git log查看,每次commit都会生成一个)

 git reset --hard HEAD^
  • git reset --mixed HEAD^ (--mixed也可以省略),保留工作区,并且清空暂存区。就是回到上一次git add 之前。

git reset HEAD^
  • git reset --soft HEAD^重置HEAD到指定的版本,不会修改暂存区暂存区就是回到上一次git commit 之前,适用于合并commit节点。

git reset --soft HEAD^
  • git revert <commitid> 会回退到之前的那次提交,会产生一个新的commit,将这次回退作为一次修改记录提交,这样的好处是不修改历史提交记录。

 git revert e241441d8a85b2d89
已使用 push
  • git push -f 可以在本地执行以上操作后,然后强行推送到远程仓库

git push -f

删除

  • git rm <文件名> 这个必须是commit 之后的文件

 git rm demo.txt
  • git rm -f <文件名> 这个执行add 未执行 commit可以删除

 git rm -f 4.txt

远程仓库

  • 以上都是在本地仓库进行操作的,提交的代码别人也是看不到的,如果写着代码硬盘坏了咋办?那是不是所有的代码都没了。所以写完了代码赶紧推送到服务器上去。

添加远程库

用命令git remote add origin git@server-name:path/repo-name.git;关联远程仓库

关联之前肯定要在远程创建仓库

  • 首先要到https://github.com/全球最大同性交友网站上注册一个账号。已有账号的就忽略了。

  • 接下来就是新建一个远程仓库了。

 git remote add origin git@github.com:workit1/studygit.git

关联后,使用命令git push -u origin master第一次推送master分支的所有内容。

git push -u origin master

以后,每次本地提交后可以使用命令git push origin master推送最新修改到远程仓库。

从远程库克隆

  • 前面我们了解先有本地仓库,再有远程库的时候,如何关联远程库。但是一般实际开发中我们是先有远程仓库的,然后从远程库克隆。

 git clone https://github.com/workit1/gitstudy.git

分支管理

  • git checkout -b <创建分支名> 表示创建并切换分支

Administrator@XCRBHXD05IEZEVS MINGW64 /d/gitstudy (master)
$ git checkout -b feature_a
Switched to a new branch 'feature_a'

基于master分支创建了feature_a分支并且切换到了feature_a分支。

  • git checkout <name> 或者 git switch <name> 切换分支

 git checkout master
  • git branch -a 查看所有分支,包含远程分支

  • git branch 查看本地所有分支

  • 合并分支

git merge master

当有冲突的时候这里会个正在合并的状态

  • 取消合并,此时你如果不想合并了,可以使用git merge --abort取消。

git merge --abort
  • 删除分支

  1. 删除本地分支git branch -d <name>

 git branch -d feature_a
  1. 删除远程分支git branch -D <name>

实际项目中如果我们需要开发一个功能完整的流程是什么样的呢?多数公司模式应该下面这样的流程吧。1.先基于主干分支 拉出一个功能分支(feature_xx)进行开发。2.开发完成后测试基于这个功能分支进行测试。3.测试完成后,开发把功能分支合并到主干分支。合并代码操作如下:

  1. 先切换到主干分支(release),主干分支git pull 拉下远程分支最新代码(可能有同事提交了新的代码)

  2. 切回到功能分支 把本地主干最新代码合(git merge)并到当前功能分支,如果合并有冲突就解决冲突后重新提交。

  3. 切换到主干分支执行git merge 功能分支。(这一步实际工作中一般人是不能这么操作的),代码必须要先发起一个merge request 经过代码review才能进行合并到主干分支的。

  4. 合并完主干分支后,功能分支就可以删除了。

总结

  • 以上命令基本上可以应付工作中大多数场景了,不过git还有很多高级的玩法。如果大家想更深入学习了解的话,我这边为大家整理了一份Git的学习资料,从学习入门到高阶。还有git所有命令的思维导图。公众号【java金融】回复【git】就可以免费获取了。

  • 还为大家找了一个可以在线练习git的学习网站。赶紧去试试吧,超级有意思,相信你一口气就通关了。https://learngitbranching.js.org/?locale=zh_CN

  • 视频地址https://www.bilibili.com/video/BV1Xt4y1X73x/

结束

  • 由于自己才疏学浅,难免会有纰漏,假如你发现了错误的地方,还望留言给我指出来,我会对其加以修正。

  • 如果你觉得文章还不错,你的转发、分享、赞赏、点赞、留言就是对我最大的鼓励。

  • 感谢您的阅读,十分欢迎并感谢您的关注。

  • 特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:长按订阅更多精彩▼如有收获,点个在看,诚挚感谢
    
参考 https://www.liaoxuefeng.com/wiki/896043488029600/896202780297248

10分钟带你入门git到github相关推荐

  1. 一起玩react 10分钟带你入门ant-design-pro

    前言 这篇文章主要根据自己最近一个月从学习react到最近实际使用ant-design-pro,谈一谈自己的使用心得,个人见解有误的地方望大家指正! 1.为什么要选择ant-design-pro? 其 ...

  2. 10分钟带你入门chrome(谷歌)浏览器插件开发

    整理chrome插件有哪些能力,插件开发入门,整理文档. chrome谷歌浏览器插件开发,听上去很高大上,其实只要熟悉HTML.CSS.JS即可开发,插件也是将html页面渲染出来并执行js脚本而已. ...

  3. 10分钟带你入门MATLAB

    前言 MATLAB基础知识,学会了这些基础知识,各位小伙伴基本上能够自主编写MATLAB程序.今天我主要讲解MATLAB的3类语句.6类函数和2类语法,好,废话不多说,我们开始学习吧! 一.3类语句 ...

  4. 10分钟带你了解python_10分钟Python入门系列教程及学习资源分享

    本期分享笔记内容 归档此前入门教程文章,方便查看 10分钟带你Python入门的特点 简单谈下如何寻找Python学习资源 关于分享Python学习资源的分享问题 本人对于Python学习创建了一个小 ...

  5. java编程石头剪刀布图片_石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源...

    原标题:石头.剪刀.布!10分钟带你打开深度学习大门,代码已开源 沉沉 发自 宇宙中心 量子位 出品 | 公众号 QbitAI 深度学习技术的不断普及,越来越多的语言可以用来进行深度学习项目的开发,即 ...

  6. a*算法matlab代码_10分钟带你入门MATLAB

    ​ 10分钟带你快速入门MATLABhttps://www.zhihu.com/video/1234089282815188992 前一段时间我发现有些小伙伴MATLAB基础比较薄弱,今天我来让各位小 ...

  7. 10分钟带你探索css中更为奇妙的奥秘

    10分钟带你探索css中更为奇妙的奥秘

  8. 10分钟带你学会微信小程序的反编译

    以xxxxx小程序为例10分钟带你学会微信小程序的反编译 2019-11-28 12:59:26 以一个简单的例子介绍下小程序反编译操作流程 实验环境 前置准备 模拟器内软件安装 获取小程序包 开始解 ...

  9. 10分钟带你彻底搞懂微内核架构

    文章目录 十分钟搞懂系列 什么是微内核架构? 如何实现微内核架构? 总结 十分钟搞懂系列 序号 标题 链接 1 10分钟带你彻底搞懂企业服务总线 https://blog.csdn.net/belon ...

最新文章

  1. mybaties分页
  2. 【NLP招聘动态】太难啦!面试官盘点NLP近五年招聘动态
  3. 深度学习Deep Learning: dropout策略防止过拟合
  4. Oracle中PLSQL中一个例外的写法
  5. go 数组任意位置插入数字类型的元素
  6. PHP 修改配置文件后重启命名
  7. 命令行Terminal增加proxy开关
  8. 【JavaScript】去除空格
  9. 华为p8刷linux系统,华为手机助手ROM一键刷机
  10. 华硕xhci灰色_[安装实录] 零基础完美黑苹果安装之华硕篇
  11. VBS隐藏bat窗口
  12. 关于C++版本的海图渲染引擎MyS57Map
  13. codeforces-1734C - Removing Smallest Multiples
  14. Leetcode. Largest Rectangle in Histogram
  15. 我说CMMI2.0之:详细剖析(PQA)过程质量保证
  16. 这4款风格各异的电脑软件,免费又实用,后悔没早点知道
  17. 传染病模型(1)——SI模型及matlab详解
  18. 从业4-证券投资基金的监管
  19. 第1章 开始使用C++
  20. stm32 关于GPIO寄存器操作

热门文章

  1. c语言 8155 数码管,基于8155的8LED显示串口通信机设计 编程
  2. 使用C++基于Socket编程实现文件下载
  3. Beautiful Subarrays (01字典树 瞎搞)
  4. 牛客--追债之旅 两种解法
  5. 主席树 ---- 2021 ICPC 昆明 M.Stone Games [主席树 + 暴力]
  6. Codeforces Round #649 (Div. 2)C. Ehab and Prefix MEXs[排列的构造]
  7. pytorch dropout_手把手带你使用字符级RNN生成名字 | PyTorch
  8. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
  9. 【题解】P1419 寻找段落(二分+单调队列)难度⭐⭐⭐★
  10. 解表化饮什么意思_为什么有人动不动就一身汗,有人再热也不出汗?中医告诉真实原因...