Git原理及操作简介

一、Git是什么

Git是目前世界上最先进的分布式版本控制系统

工作原理 / 流程:

  • Workspace:工作区

  • Index / Stage:暂存区

  • Repository:仓库区(或本地仓库)

  • Remote:远程仓库


二、SVN与Git的最主要的区别?

  • SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。

  • Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。


三、Git操作

Git配置(Git Bash)

因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识

git config --global user.name "yourname"
git config --global user.email "your email"

注意:git config --global 参数,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱

1.创建版本库

版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。

使用git init命令即可将当前文件夹变为git管理仓库:

这时候你当前testgit目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。

  • 添加与提交

    • 添加命令git add 文件夹or文件
    • 提交命令git commit -m "注释"
  • 查看状态

    • 状态查询命令git status可查看是否还有文件未提交
  • 查看版本差异

    • 比较命令git diff 文件夹or文件名可查看提交版本与之前版本不同之处
  • Git bash 中文乱码处理

    • 更改Git的配置

git config --global core.quotepath false

2.版本回退
  • 查看提交历史记录

    git log显示从最近到最远的显示日志,按q退出

    git log --pretty=oneline可以将信息整合为单行

  • 回退操作

    • git reset –hard HEAD^回退到上一版本,回退到上上个版本则将HEAD^改为HEAD^^,以此类推(数量过大时使用git reset --hard HEAD~100即可,数字100代表前100个版本)
  • 回退后回到最新版本

    • git reflog可查看历史版本号,git reset –hard 版本号即可恢复相应版本
3.撤销修改
  • 手动删除重新添加或回退到上一版本
  • git checkout -- <file>可丢弃工作区的修改(注意:若无--则变为创建分支)
4.删除文件
  • rm <file>可删除文件,再次commit可彻底删除

  • 在没有commit之前,能使用git checkout -- <file>恢复


四、创建远程仓库

1.创建与添加秘钥

ssh-keygen -t rsa -C “youremail@example.com”创建SSH key

ssh-add id_rsa本地添加密钥验证

github<settings<SSH and GPG keys<SSH keys<New SSH key远程添加公钥

2.创建新仓库
echo "# flask" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:ruishuai123/flask.git
git push -u origin master
3.Push已存在的仓库
git remote add origin git@github.com:ruishuai123/flask.git
git push -u origin master
4.clone远程仓库到本地

复制github远程仓库地址,使用git clone url#远程地址克隆到本地


五、创建与合并分支

1.创建与合并基本操作
  • 查看分支:git branch
  • 创建分支:git branch name
  • 切换分支:git checkout name
  • 创建+切换分支:git checkout –b name
  • 合并某分支到当前分支:git merge name
  • 删除分支:git branch –d name
2.解决冲突
  • 分支同文件内容与主分支不同时会产生冲突,冲突报错后使用git status查看状态

  • 使用cat 可查看该文件不同之处,<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中<<<HEAD是指主分支修改的内容,>>>>>name 是指分支上修改的内容

  • git log可查看分支合并情况

3.分支管理
  • 合并分支时默认使用Fast forward模式,删除分支后,会丢掉分支信息
  • 建议合并分支时,使用命令 git merge –no-ff -m禁用Fast forward模式,可保留信息

分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

4.bug分支

在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。

  • 当在某分支工作未完成时,需临时修改bug,可使用git stash将当前工作现场储藏。

  • 在完成bug修复后,切换回原分支,使用git stash list查看储藏内容

  • git stash apply恢复储藏内容,修复后stash内容并不删除,可使用命令git stash drop删除


六、多人协作

当从远程库克隆时,Git自动把本地的master分支和远程的master分支对应起来了,并且远程库的默认名称是origin。

  • 要查看远程库的信息 使用 git remote
  • 要查看远程库的详细信息 使用 git remote –v
1.推送分支
  • 推送分支就是把该分支上所有本地提交到远程库中,推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:使用命令 git push origin master

  • master分支是主分支,因此要时刻与远程同步

  • 一些修复bug分支不需要推送到远程去,可以先合并到主分支上,然后把主分支master推送到远程

2.抓取分支
  • 开始协作前首先要把dev分支推送到远程
  • 合作者可以在另一台电脑上(注意要把SSH key添加到github上)或者同一台电脑上另外一个目录克隆,要在dev分支上做开发,就必须把远程的origin的dev分支到本地来,可以使用命令创建本地dev分支:git checkout –b dev origin/dev
  • 开发完成后把dev分支推送到远程库,若其他合作者也在同一分支修改同一文件并推送,则会产生冲突,先用git pull(需指定本地dev分支与远程origin/dev分支的链接git branch --set-upstream dev origin/dev)把最新的提交从origin/dev抓下来,然后在本地合并,解决冲突,再推送
3.多人协作工作模式
  1. 首先尝试git push origin branch-name推送修改

  2. 若推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并

  3. 若合并有冲突,则需要解决冲突,并在本地提交,再用git push origin branch-name推送


七.gitignore忽略规则简单说明

  • 被过滤掉的文件不会出现在git仓库中,但任存在于本地库中,只是push的时候不会上传。
*.a       #表示忽略所有 .a 结尾的文件
!lib.a    #表示但lib.a除外
/TODO     #表示仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/    #表示忽略 build/目录下的所有文件,过滤整个build文件夹;
  • gitignore还可以指定要将哪些文件添加到版本管理中,只需在文件前加上!即可:
!*.zip           #添加所有zip文件
!/mtk/one.txt    #添加mtk目录下的one.txt
  • 若.ignore文件中只有过滤规则,而没有添加规则,就要把目录下除了需忽略的文件外所有的文件都列写出来。

Git原理及操作简介相关推荐

  1. Git理论、原理、操作

    Git理论.原理.操作 Git简介: 一个开源的分布式版本控制系统.用于处理任何大大小小的项目,是一个开放源码的版本控制软件. Git与SVG的区别: 1.git是分布式的 2.git把内容按元数据方 ...

  2. git原理和常用操作

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 由于gitlab的免费私有仓库的优势,所以在公司使用gitlab会多一些,对于gitlab来说,注册需要翻墙,而登录不需要. 关于git是做什么的,这 ...

  3. Git 原理详解及实用指南

    Git 原理详解及实用指南 什么是版本控制系统(VCS) 很多人认为 Git 难以理解的第一个门槛在于:所谓的「Git 是一个分布式版本控制系统」这句话的具体含义不够清楚.其实分布式版本控制系统(Di ...

  4. git 原理详解及实用指南_如何编写良好的提交消息:实用的Git指南

    git 原理详解及实用指南 To create a useful revision history, teams should first agree on a commit message conv ...

  5. git原理及常见使用方法

    Git 原理入门-来自阮一峰 Git 是最流行的版本管理工具,也是程序员的必备技能之一. 即使天天使用它,很多人也未必了解它的原理.Git 为什么可以管理版本?git add.git commit这些 ...

  6. 图解git原理与日常实用指南

    缘起 读了"扔物线"老师的小册<Git 原理详解及实用指南>感觉收获良多,于是想写点东西做一个总结,即加深自己的印象也希望能给社区小伙伴一点帮助,写的不对的地方还请多多 ...

  7. Git版本控制常见操作

    大家好,哈哈,萍子有日子没更新博文了呢,最近真的是懒得不要不要的,然后最近萍子手里在跟进一个小程序的项目,所以就没再更新那马马虎虎的博文了,小伙伴们见谅哦~ 萍子一直以来对于git的使用心里都很发怵, ...

  8. Android 系统(175)---Android硬件加速原理与实现简介

    Android硬件加速原理与实现简介 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到"硬件加速"这个词.由于操作系统对底层软硬件封装非常完善,上层软件开发者往往 ...

  9. -m commit git_Git 天天用,但是 Git 原理你了解吗?不进来了解一下?

    前言 做技术一定要知其然知其所以然,意思就是:知道它是这样的,更知道它为什么是这样的.我主要通过4块内容来简单介绍 Git 原理是什么样的.这4块内容如下: Git 存储目录结构介绍 Git 是如何存 ...

最新文章

  1. c语言编写木马软件,【C语言】后台木马程序
  2. c#:winform鼠标拖动窗口大小时,设定窗口最小尺寸
  3. 质量体系审核中的10大常见场景,你遇到了几个?
  4. python数据展示库_收藏!盘点很实用的数据科学Python库
  5. 客户端渲染(CSR)
  6. 商业认知,新的一年已经开始,许多老板都制订了新的目标
  7. Android App层通过JNI从驱动获取Input Event
  8. 2011-2017年中国各地政府BIM相关标准政策汇总
  9. 用js把数字转化成为大写金额
  10. android 图片背景模糊,实现图片模糊(背景虚化),实现图片模糊背景
  11. 罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因
  12. 蓝牙(四)LMP协议解析之二
  13. DIV滚动条自动滚动到最底部的两种方法
  14. 精密型工业级UHF超高频RFID读写器|读卡器JT7300的MODBUS协议说明
  15. python回车换行怎么不行_python回车不能换行怎么办
  16. JavaScript内存溢出
  17. 美国的米拉超级计算机,超级计算机“米拉”:效力阿贡国家实验室_Intel Xeon E5-4650_服务器评测与技术-中关村在线...
  18. 广西免考职称英语计算机,广西职称英语免考条件及免试人群
  19. EOS智能合约编译部署
  20. MATLAB实验(信号与系统的频域分析)

热门文章

  1. win10下编译C代码:cmd 命令行 + notepad 记事本
  2. 1年Java历程的回顾、反思与展望
  3. java 除法取整_java 除法运算只保留整数位的4种方式
  4. php7.0安装windows_Windows 7 下如何配置PHP网站运行环境
  5. 用DensePose,教照片里的人学跳舞,系群体鬼畜 | ECCV 2018
  6. ps kworker irq
  7. 液晶显示器的参数说明-购买夜晶显示器指南
  8. 《如何打一场数据挖掘赛事》入门版
  9. 用磁带录音机发射收音机接收信号的对讲机
  10. html5 video