1. 简单介绍

1.1. git起源

   在1991年linus创建了Linux从此linux成为服务器领域的佼佼者,大部分web服务器、邮件、数据库各种服务器端程序都安装在了linux上面运行,主要是因为它运行的快速、高效、利用率高,这样一个优秀的系统并不是一个人在维护,来自民间的众多高手一起在维护这linux发展,那么这么多分布式世界各地的人如何共同维护如此多的Linux代码呢?
这就需要一个分布式代码管理工具,linus使用过BitKeeper来管理代码但是它是收费的,让很多人用着不爽,后来linus本人就自己开发写了一个工具来管理,这就是git的第一个版本。
后来随着时间推移越来越多的开源软件通过Git来管理,为了把世界各地的开源项目管理起来,GitHub网站随后上线了,很多流行的项目加入的此网站上面。例如我们经常使用的jquery等。

1.2. 集中式vs分布式

  分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!

  集中式版本控制系统像CVS、SVN等,一般是将代码部署到一台服务器上面,每个开发者在每天开发之前需要从服务器上面checkout下来最新的代码,本地修改完后要 commit,要求本地电脑与服务器连着才可以提交如果网络带宽慢则会很卡,记得曾经在公司提交代码,几十k的代码每次提交都会卡住,很影响开发速度和开发质量。

  相比之下,git本地就有仓库,每个开发者都有完整的代码,可以在上面进行各种开发,没有网络的延迟。提高开发效率。每个人修改代码之后会将修改的代码互相推送给每个人,通常为了提高互相推送的传输效率往往搭建一台git服务器来进行代码的推送和拉回,可以提高开发效率。

1.3. 各种git的介绍

  1. git是一个本地工具,用来关联远程的git服务器,同时本地也有时光穿梭的功能
  2. gitlab,github,码云等都是云服务,是本地的git的一个镜像。在不同电脑上就可以拉取,同步。

1.4. git的安装

一般大神都是用git的命令行工具,同时也有很多的图形化工具:souretree等

  1. windows 下的安装

从官网上 :https://git-scm.com/ 上下载,傻瓜式安装就好了

  1. linux 下安装

yum install git

2. 本地git的使用

2.1. 初始化本地仓库

# 使用gitbash创建一个目录,并进入到该目录种
mkdir learngit
cd learngit
# 初始化仓库
git init
# 在该文件下多了一个.git的隐藏目录
$ ll -a
total 24
drwxr-xr-x 1 LH 197121 0 6月 28 14:22 ./
drwxr-xr-x 1 LH 197121 0 6月 28 14:20 ../
drwxr-xr-x 1 LH 197121 0 6月 28 14:22 .git/

2.2. 配置识别账户与密码

这个账户密码并不是登入的账号密码,只是作为一个识别码,区分谁提交的。

每次commit的时候,都会带上这个信息

git config --global --list  # 查看是否配置了
git config --global user.name hui
git config --global user.email 232344@qq.com

2.3. git的操作

使用下面的命令就可以完成一次版本的提交。

git add filename         # add dir 添加该文件下所有文件; add file1 file2 ; add . 添加所有所有的文件。
git commit -m '注释消息' # -m是注释的意思。注意的是 每次版本提交都要详细标明每次变化

2.4. 三区:工作区、缓存区、版本区

  1. 工作区就是我们工作的区域--我们编写代码的地方
  2. 暂存区,index(stage) -- add的地方
  3. 版本区 -- commit的地方

2.5. 查看提交的版本信息

git log
git log --pretty=oneline # 一行显示,还有其他参数自己研究

2.6. 版本回退-git reset

回退到上一个版本  git reset --hard HEAD^
回退到上上个版本 git reset --hard HEAD^^
回到到上100个版本 git reset --hard HEAD~100
回退到指定的版本 git reset --hard 具体的版本号(使用git log查看)

但是我们回到上一个版本之后,使用git log 看不到之后的版本了,这个很蛋疼:

  1. 使用命令行上面git log可以看到之后的版本,可以到那个版本去。
  2. 使用git reflog 可以看到每一次操作的版本号(一般都使用这个)

2.7. 撤销-git checkout

git checkout -- filename

分为两种情况:

  1. 如果文件自修改后还没有add到缓存区,现在撤销的话,工作区就会和版本库一直
  2. 如果文件已经添加到缓存区,又做了修改。现在撤销的话,就会回到缓存去的状态

总之,就是让文件回到最后一次git add 或 git commit的状态

3. 远端仓库

3.1. github设置

  1. 再创建账号密码之后,创建新仓库
  2. public是公有的,大家都能看见。private是私有的,但是需要money
  3. init选项,最好不要选择,不然会造成 本地的master 与 远程的master不一致(本地没readme,远端有readme),推送的时候会发生错误。可以先pull下来,让本地与云端都有readme。这样可以解决
  4. .gitignore是忽略某些文件:一些大文件,我们不需要修改,但又比较大。再push的时候,就可以忽略。增加速度

    license是一个公开授权,没啥用

3.2. 两种连接方式

  1. 使用https的连接方式-适合单人

需要账号密码认证- 适合单人的项目

git remote add origin https://github.com/star-hui/gittest.git
# origin是仓库的名字,可以随意定义但是下面必须一直
git push -u origin master
# 第一次推送的时候,需要把本地的mster分支与远程的master分支合并。所以加上-u参数
git push origin msster
# 之后每次连接不需要-u参数
  1. 使用ssh连接-适合团队

直接使用公钥,团队成员每个成员的公钥都加入进来,就可以一起使用了。

# 第一步:在你本地先生成rsa的密钥
ssh-keygen.exe -t rsa -C '123@qq.com' # 邮箱是团队每个成员自己的邮箱,只作为标识符 # 第二步: 在上一步生成的rsa文件夹种,把.pub结尾的文件加入到github网站的ssh-key中 # 第三步: 本地进行关联操作
git remote add louhui git@github.com:star-hui/sshtest.git
# louhui只是仓库名,:后面的为项目地址,前面邮箱都使用Git官方邮箱。 # 第四部: 推送
# 第一次推送,需要合并本地与远端的master分支
git push -u louhui master
# 以后推送
git push -u louhui master

在上面其实我们看出,本地的git可以添加多个远程仓库,使用仓库名来区分就可以了。如下:

git remote add louhui | origin
git push louhui | origin master # 使用不同的仓库名,进行推送

3.3. 克隆云端的项目

本地不需要新初始化一个仓库,克隆下来就是一个仓库了:

有两种办法,有些网络场景被屏蔽的一些端口的时候,可以从这两种来选择。

  1. 第一种直接使用远端的仓库https地址:进入到仓库,直接复制下来

git clone https://github.com/star-hui/gittest

  1. 第二种使用ssh来连接克隆

git clone git@github.com:star-hui/sshtest.git

3.4. 分支管理

  待完善

Git 从了解到放弃的更多相关文章

  1. git从入门到放弃

    到你想进行版本控制的文件所在的目录下(该目录即是工作区) 查看状态 git status 初始化 git init 添加到暂存区 git add 提交到版本库 git commit -m " ...

  2. Git的使用 强制放弃本地所有修改,获取master中最新版本更新本地

    git fetch --all git reset --hard origin/master git fetch --all 的意思是,下载远程库的所有内容,但不与本地做任何合并 git reset ...

  3. GIT 从入门到放弃大整理

    跟着廖雪峰学 GIT  http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 GUI f ...

  4. GIt 从入门到放弃

    一.注册github账号 github网址https://github.com/ 下一步 然后,你的邮箱会收到一封邮件,进行邮箱验证就行了 二.创建github仓库 登录你的github,在首页的右方 ...

  5. 30分钟Git命令入门到放弃

    git 现在的火爆程度非同一般,它被广泛地用在大型开源项目,团队开发,以及独立开发者,甚至学生之中. 初学者非常容易被各种命令,参数吓哭.但实际上刚上手你并不需要了解所有命令的用途.你可以从掌握一些简 ...

  6. git 强制刷新,放弃更改

    git fetch --all  git reset --hard origin/master

  7. git 强制放弃本地修改(新增、删除文件)【转】

    本文转载自:https://blog.csdn.net/u012672646/article/details/56676804 本地修改了一些文件,其中包含修改.新增.删除的,不需要了想要丢弃,于是做 ...

  8. git 强制放弃本地修改(新增、删除文件)

    本地修改了一些文件,其中包含修改.新增.删除的. 不需要了,想要丢弃,于是做了git check -- .操作,但是只放弃了修改的文件,新增和删除的仍然没有恢复. 于是百度了下,使用如下命令: git ...

  9. 简明 Git 命令速查表(中文版)

    原文引用地址:https://github.com/flyhigher139/Git-Cheat-Sheet/blob/master/Git%20Cheat%20Sheet-Zh.md在Github上 ...

随机推荐

  1. PKU 3041 Asteroids 最小点覆盖(最大匹配模板题)

    题目大意:给你一个N*N的矩阵, 里面有K个星球, 我们可以让武器攻击矩阵的一行或者一列来使得这个星球被击碎, 现在问你最少需要几个这种武器才能把所有的星球击碎? 解题思路:关键是建模构图 把每一行当 ...

  2. java模拟http/https post请求

    1.Post请求失败的代码 try { HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = respon ...

  3. PL/SQL编程—存储过程

    SQL> create or replace procedure sp_pro3(name_in varchar2,id_in varchar2) is begin update mytest ...

  4. cisco anyconnect linux

    cisco anyconnect linux 官方的下载需要登录验证,比较麻烦,可以从这个地方直接下载使用.支持ubuntu,centos. cisco anyconnect vpn client我本 ...

  5. NGUI基本事件

    You can add the following functions to your scripts placed on widgets or in-game objects with a coll ...

  6. cocos2d-x 3.3 引用【#include "cocos-ext.h"】头文件出现编译错误

    添加[#include "cocos-ext.h"] 头文件后报错 f:\projects\test_httpclient\cocos2d\extensions\gui\cccon ...

  7. linux 用到的命令

    1.  cd   /   直接到服务器根目录 2.  pwd    查看 当前所在目录 3. ll   查看当前文件下文件列表 4.ls   查看当前文件下文件,横向排列 5.ps -ef | gre ...

  8. nginx 代理服务器配置双向证书验证

    生成证书链 用脚本生成一个根证书, 一个中间证书(intermediate), 三个客户端证书. 脚本来源于(有修改)https://stackoverflow.com/que... 中间证书的域名为 ...

  9. STL set集合用法总结(multiset)

    2017-08-20 15:21:31 writer:pprp set集合容器使用红黑树的平衡二叉树检索树,不会将重复键值插入,检索效率高 logn 检索使用中序遍历,所以可以将元素从小到大排列出来 ...

  10. Objective C Protocol implementation

    protocol 类似于接口,可以实现函数的回调 @protocol MyDelegate<NSObject> -(void)myCallbackFunction; @end //Call ...