git是什么(写在前边的叨叨,就是给一点不懂的小白打个比喻,大佬请自行跳过)

git在平时的开发中用的太频繁了,以至于我都不知道如何去形容它。囧。

假设我们开发的工作类似于图书整理,写的代码就是很多人借书还书,假设我和你一起来整理这些书,有很多人来借书,你给A一本,我给B一本,这没有任何问题,但是,突然来了C和D,他俩同时要借一本《时间简史》,而且这本书仅此一本,我的手伸向了这本书,你的手也伸向了这本书,然后,是书在我们俩的争夺中被撕成两半了?还是我和你打起来了?

我们当然都不会这么蠢,我们拿书的时候一定会看看对方有没有正在拿,如果你先伸手了我就让给你,没有必要打一架(笑)。

我们多人开发的时候,维护一套代码,git这个工具就包含了我们许多的行为,比如常用的git pull 就相当于是用眼睛去看一下,看看书架是不是有别人已经动过了,别人已经把书摆满了,自己还继续往这个地方放书,当然放不进去啦。

git安装

  1. windows :https://git-scm.com/downloads
  2. linux:yum install git / apt-get install git
  3. MacOS: brew install git

git常规操作

1. 新建仓库,设置全局的个人信息,ssh-key的设置

  • 新建仓库
git init
  • 设置个人信息
git config --global user.name "yourname"
git config --global user.email test@runoob.com
git config --list //查看当前配置信息
  • ssh-key的设置

    由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以必须要让github仓库认证你SSH key,在此之前,必须要生成SSH key。

    首先在家目录下进入 .ssh 文件夹,如果没有这个文件夹或者文件夹下没有id_rsa、id_rsa.pub两个文件,就进行下边的生成过程。
ssh-keygen -t rsa -C "youremail@example.com"

之后一路回车,.ssh文件夹下就有了两个文件,私钥id_rsa和共钥id_rsa.pub,需要提供ssh密钥的都是要的共钥,id_rsa.pub。

2. 拉取远程仓库,设定远程仓库,分支和远程建立连接

  • 拉取远程仓库
git clone [git地址]

这个就是最常用的git拉取一个仓库的代码到本地的命令,会在当前的目录下新建一个仓库代码文件夹。如果你的ssh已经保存在这个仓库里了,那么你可以push,否则的话你只有pull的权限。

  • 设定远程仓库

    比如现在你是在本地init了一个仓库,然后你在github上申请了一个仓库地址,你要把你的代码推到github上,就需要设定远程仓库了。
git remote add [名字] [地址]

比如git remote add origin git@github.com:gaopu1995/hiphp.git,就可以把本地仓库和远程建立连接。一般默认叫它 origin。

其他的几个远程仓库命令:

git remote  //查看当前远程分支名字
git remote -v //查看当前远程分支的url,有两个,一个fetch的,一个push的,一般会是一样的,就是你设置的那一个
git remote remove <name> //移除远程分支
git remote -h //其他的就自己看一下帮助吧
  • 当前分支和远程仓库的分支建立连接
git push --set-upstream origin master

如果你删除或者更换了远程仓库,新的仓库在你推送的时候会让你把你当前的分支和远程分支建立映射关系,最后的两个参数就是远程仓库名和远程仓库的分支名,操作对象是你当前分支。

3. 推拉提交,处理冲突

  • 推拉提交
git pull        //拉取最新代码
git push //把本地提交推送到远程
git add [文件](多个文件空格隔开) //把本地的更改添加到更改缓存中
git commit -m "提交注释" //提交目前缓存中的更改

解释一下:

  1. git的管理是针对修改的,而推拉的单位都是每次提交的修改,就是你每次拉取(pull)的时候,都是按照别人推送的内容拉取的。比如别人推送了三个文件的修改,那你拉下来,要么不拉取,要么就是这三个文件的改动。
  2. 而推送的时候,首先是有一个缓存区,你把你想要提交的修改文件添加到这个缓存区,然后提交的时候就会统一把这个缓存区里的所有修改都提交到本地。
  3. 提交是提交到本地,本地的修改推送(push)到远程仓库,别人才能拉取到你的修改。
  4. commit的注释一定要写明白。这是个合作工具。交流很重要。
  • 处理冲突
  1. 冲突是什么:比如一个文件,他修改了,而你在没有拉取他的代码之前,也对这个部分修改了,就会产生冲突。
  2. 为什么会有冲突:前边说过,git是对修改进行管理的,比如本来是一个a,他把a->b,你把a->c,现在他先提交的,你拉取他的代码,你的git合并你们的修改的时候,要把a变成b,但是你已经把a变成c了,git就会把这个区域标出来
  3. 怎么改:冲突部分会用 >>>>>>>>分支 标出来,改成正确的,add然后commit就行。

4. 新分支,分支合并,分支删除

git checkout [分支名]  //切换分支
git checkout -b [新分支名] //从当前分支copy一个新的分支
git branch -d [分支名] //删除分支
git branch //显示当前所在分支
git merge [分支名] //当前分支合并目标分支的修改

5. 暂存stash

git stash   //暂存代码
git stash list //查看stash存的内容
git stash pop //恢复第一个暂存
git stash clear //清理暂存

6. 查看log

git log  //查看提交记录
git log --oneline //查看提交记录的简单模式

7. 回溯

git reset --hard commit_id  //回退到某个版本

git小白入门全攻略的更多相关文章

  1. SpringCloud之Hystrix服务降级入门全攻略

    理论知识 Hystrix是什么? Hystrix是由Netflix开源的一个服务隔离组件,通过服务隔离来避免由于依赖延迟.异常,引起资源耗尽导致系统不可用的解决方案.这说的有点儿太官方了,它的功能主要 ...

  2. 开发小白也毫无压力的hexo静态博客建站全攻略 - 躺坑后亲诉心路历程

    目录 基本原理 方法1 - 本机Windows下建站 (力荐) 下载安装node.js 用管理员权限打开命令行,安装hexo-cli和hexo 下载安装git 初始化hexo 使用hexo gener ...

  3. 打造一个高逼格的android开源项目——小白全攻略 (转)

    转自:打造一个高逼格的android开源项目 小引子 在平时的开发过程中,我们经常会查阅很多的资料,最常参考的是 github 的开源项目.通常在项目的主页面能看到项目的简介和基本使用,并且时不时能看 ...

  4. 【转】轻松搞定FTP之FlashFxp全攻略

    转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...

  5. Android使用XML全攻略(1)

    Android使用XML全攻略(1)    Android 是针对移动设备的一种新兴的开源操作系统和 SDK.借助它,您可以创建功能强大的移动应用程序.当您的应用程序可以访问 Web 服务时,其吸引力 ...

  6. MyEclipse优化全攻略

    (0) 吐槽 Eclipse仅仅是个半成品有木有?什么都须要自己安装插件,新手非常难用有木有? 安装上插件以后了版本号兼容和各种问题烦死人有木有? 都怪碎片和版本号乱公布有木有? IntelliJ I ...

  7. VSCode插件开发全攻略(十)打包、发布、升级

    更多文章请戳VSCode插件开发全攻略系列目录导航. 发布方式 插件开发完了,如何发布出去分享给他人呢?主要有3种方法: 方法一:直接把文件夹发给别人,让别人找到vscode的插件存放目录并放进去,然 ...

  8. VSCode插件开发全攻略(三)package.json详解

    更多文章请戳VSCode插件开发全攻略系列目录导航. package.json 在详细介绍vscode插件开发细节之前,这里我们先详细介绍一下vscode插件的package.json写法,但是建议先 ...

  9. VSCode插件开发全攻略(一)概览

    文章索引 VSCode插件开发全攻略(一)概览 VSCode插件开发全攻略(二)HelloWord VSCode插件开发全攻略(三)package.json详解 VSCode插件开发全攻略(四)命令. ...

随机推荐

  1. Java 注解 (Annotation)你可以这样学

    注解语法 因为平常开发少见,相信有不少的人员会认为注解的地位不高.其实同 classs 和 interface 一样,注解也属于一种类型.它是在 Java SE 5.0 版本中开始引入的概念. 注解的 ...

  2. ROS学习笔记(二) # ROS NodeHandles

    1. 自动启动和关闭 ros::NodeHandle nh: 这段代码执行之后,如果内部节点还没有启动,ros::NodeHandle 会启动这个节点:一旦所有的 ros::NodeHandle 实例 ...

  3. kafka系列七、kafka核心配置

    一.producer核心配置 1.acks :发送应答(默认值:1) 生产者在考虑完成请求之前要求leader收到的确认的数量.这控制了发送的记录的持久性.允许以下设置: acks=0:设置为0,则生 ...

  4. TortoiseSVN常用配置

    在Windows下推荐使用乌龟(Tortoise)SVN客户端. TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录. 文件保存在中央版本 ...

  5. EMCA和EMCTL的简单用法

    背景 其实这两个完全是两回事,不过倒是有关系,emca就是建立的资料库,建立后就用emctl来管理服务了.oem有问题基本都是重建emca,然后用emctl来操作. 当时用emca感觉真是一阵空白,太 ...

  6. centos7.2环境下安装smokeping对网络状态进行监控

    centos7.2环境下安装smokeping对网络状态进行监控 安装smokeping建议用centos7,用centos6.5一直卡在smokeping那里,下载不了perl的扩展插件,可能是因为 ...

  7. 16-client、offset、scroll系列

    1.client系列 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  8. Ex 6_9 某个字符串处理语言提供了一个将字符串一分为二的基本操作..._第六次作业

    设字符串的长度为n,整型数组arr[0. . .n-1]的第一个数和最后一个数为开始点与结束点的位置,中间的数为拆分点的位置,设cost[i,j]为第i个分割点到第j个分割点的最小代价,两个分割点之间 ...

  9. vue系列之核心思想

    1.数据驱动 只要改变数据,Vuejs会通过Directives指令对DOM进行封装,当数据发生变化,会通知相应的DOM进行变化 Vuejs会对DOM进行监听,通过DOMListeners监听视图的变 ...

  10. TCP/IP、Http大纲

    TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只 ...