Git进阶

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 与 SVN 区别

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。

Git 与 SVN 区别点:

  • 1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
  • 2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
  • 3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
  • 4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
  • 5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

Git命令

我们先来预览一下Git命令

{
    mkdir:         XX (创建一个空目录 XX指目录名)

    pwd:          显示当前目录的路径。

    git init          把当前的目录变成可以管理的git仓库,生成隐藏.git文件。

    git add XX       把xx文件添加到暂存区去。
    
    git reset --mixed 把上次add文件撤销但修改保留。

    git commit –m “XX”  提交文件 –m 后面的是注释。

    git status        查看仓库状态

    git diff  XX      查看XX文件修改了那些内容

    git log          查看历史记录

    git reset  –hard HEAD^ 或者 git reset  –hard HEAD~ 回退到上一个版本

                            (如果想回退到100个版本,使用git reset –hard HEAD~100 )

    cat XX         查看XX文件内容

    git reflog       查看历史记录的版本号id

    git checkout — XX  把XX文件在工作区的修改全部撤销。

    git rm XX          删除XX文件

    git remote add origin https://github.com/tugenhua0707/testgit 关联一个远程库

    git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库

    git clone https://github.com/tugenhua0707/testgit  从远程库中克隆

    git checkout –b dev  创建dev分支 并切换到dev分支上

    git branch  查看当前所有的分支

    git checkout master 切换回master分支

    git merge dev    在当前的分支上合并dev分支

    git branch –d dev 删除dev分支

    git branch name  创建分支

    git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作

    git stash list 查看所有被隐藏的文件列表

    git stash apply 恢复被隐藏的文件,但是内容不删除

    git stash drop 删除文件

    git stash pop 恢复文件的同时 也删除文件

    git remote 查看远程库的信息

    git remote –v 查看远程库的详细信息

    git push origin master  Git会把master分支推送到远程库对应的远程分支上
}

Git深度理解

{
    1.git进入vim界面 输入Ctrl+Z 即可退出 ////////Esc Shift+: 

    2.查看git所有已配置项 $ git config --list

    3.Git撤销commit的操作命令  git reset --hard HEAD^       git reset --hard commitID    git reset --hard HEAD@{n}

    4.git 撤销初始化 删除 .git 文件即可 或者执行命令 rm -rf .git

    5.git add . 出现以下报错
        ---------- warning: LF will be replaced by CRLF in XXXXXXXXXXXXXX.
        ---解决方案:执行命令git config core.autocrlf false
        
    6. 查看git本机 用户名: $ git config --global user.name
                    邮箱: $ git config --global user.email
        更改本机配置 用户名: $ git config --global user.name "Lee"
                    邮箱: $ git config --global user.email "Jack2244057555@gmail.com"
}
{   
    一.Git命令解析
    1、git基本命令

    1)git add 将想要快照的内容写入缓存区

    2)git status -s "AM" 状态的意思是,这个文件在我们将它添加到缓存之后又有改动

    3)git commit -m '第一次版本提交' -m选项添加备注信息

    4)git clone url 使用 git clone 拷贝一个 Git 仓库到本地

    5)git diff 查看执行 git status 的结果的详细信息
      尚未缓存的改动:git diff
      查看已缓存的改动: git diff --cached
      查看已缓存的与未缓存的所有改动:git diff HEAD
      显示摘要而非整个 diff:git diff --stat
            
    6)git commit -a 跳过git add 提交缓存的流程 

    7)git reset HEAD 用于取消已缓存的内容

    8)git rm file 
      git rm 会将条目从缓存区中移除。这与 git reset HEAD 将条目取消缓存是有区别的。
      "取消缓存"的意思就是将缓存区恢复为我们做出修改之前的样子。
      默认情况下,git rm file 会将文件从缓存区和你的硬盘中(工作目录)删除。
            
    9)git mv 重命名磁盘上的文件 如 git mv README README.md

    10)git push -u origin master 提交代码

    2、git 分支管理
    1)创建分支命令 git branch (branchname) 列出分支 git branch
    2)切换分支命令 git checkout (branchname)
    3)合并分支 git merge (branchname)
    4)创建新分支并立即切换到该分支下 git checkout -b (branchname)
    5)删除分支命令 git branch -d (branchname)
    ps:状态 uu 表示冲突未解决 可以用 git add 要告诉 Git 文件冲突已经解决

    3、查看日志版本
    git log 命令列出历史提交记录
    git log --oneline 查看历史记录的简洁的版本
    git log --oneline --graph 查看历史中什么时候出现了分支、合并

    4、标签
    为软件发布创建标签是推荐的。这个概念早已存在,在 SVN 中也有。你可以执行如下命令创建一个叫做 1.0.0 的标签:
    git tag 1.0.0 1b2e1d63ff
    1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。可以使用下列命令获取提交 ID:
    git log
    你也可以使用少一点的提交 ID 前几位,只要它的指向具有唯一性

    5、提取远程仓库代码

    1)git fetch  从远程仓库下载新分支与数据

    2))git pull  从远端仓库提取数据并尝试合并到当前分支

    6、git分支

    git-flow主要有5中分支:master、hotfix、release、develop、feature

    feature分支开始于develop分支,完成以后合并到develop分支。
    当完成一定数量feature分支以后,从develop再开一个release分支出来,这些特性将被更行到下一个发布的版本中,
    之后的feature将不会被合并到release中。
    之后在release分支中,只修改bug,然后完成release分支。完成release分支会完成以下三个操作:
    1、合并release分支到master;
    2、给master打上版本的标签
    3、release回归到develop分支。
    当发现master上有bug时,开一个hotfix,完成后合并到master分支。


    初次安装git配置用户名和邮箱
    
    初次安装git需要配置用户名和邮箱,否则git会提示:please tell me who you are.



    你需要运行命令来配置你的用户名和邮箱:

    $ git config --global user.name "superGG1990"

    $ git config --global user.email "superGG1990@163.com"

    注意:(引号内请输入你自己设置的名字,和你自己的邮箱)此用户名和邮箱是git提交代码时用来显示你身份和联系方式的,并不是github用户名和邮箱
    git使用ssh密钥
    
    git支持https和git两种传输协议,github分享链接时会有两种协议可选:

    git协议链接图例 : ↓



    https协议链接图例:↓

        

    git使用https协议,每次pull, push都会提示要输入密码,使用git协议,然后使用ssh密钥,这样免去每次都输密码的麻烦
    
    初次使用git的用户要使用git协议大概需要三个步骤:
    一、生成密钥对
    二、设置远程仓库(本文以github为例)上的公钥
    三、把git的 remote url 修改为git协议(以上两个步骤初次设置过以后,以后使用都不需要再次设置,此步骤视以后项目的remote url而定,如果以后其他项目的协议为https则需要此步骤)
    一、生成密钥对
    大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。首先你要确认一下本机是否已经有一个公钥。

    SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。进去看看:

    $ cd ~/.ssh
    $ ls
    authorized_keys2  id_dsa       known_hosts config            id_dsa.pub
    看一下有没有id_rsa和id_rsa.pub(或者是id_dsa和id_dsa.pub之类成对的文件),有 .pub 后缀的文件就是公钥,另一个文件则是密钥。

    假如没有这些文件,甚至连 .ssh 目录都没有,可以用 ssh-keygen 来创建。该程序在 Linux/Mac 系统上由 SSH 包提供,而在 Windows 上则包含在 MSysGit 包里:

    $ ssh-keygen -t rsa -C "your_email@youremail.com"

    Creates a new ssh key using the provided email # Generating public/private rsa key pair.

    Enter file in which to save the key (/home/you/.ssh/id_rsa):
    直接按Enter就行。然后,会提示你输入密码,如下(建议输一个,安全一点,当然不输也行,应该不会有人闲的无聊冒充你去修改你的代码):

    Enter same passphrase again: [Type passphrase again]
    完了之后,大概是这样:

    Your public key has been saved in /home/you/.ssh/id_rsa.pub.
    The key fingerprint is: # 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@youremail.com
    到此为止,你本地的密钥对就生成了。

    二、添加公钥到你的远程仓库(github)
    

    1、查看你生成的公钥:

    $ cat ~/.ssh/id_rsa.pub

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0X6L1zLL4VHuvGb8aJH3ippTozmReSUzgntvk434aJ/v7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8vR3c8E7CjZN733f5AL8uEYJA+YZevY5UCvEg+umT7PHghKYaJwaCxV7sjYP7Z6V79OMCEAGDNXC26IBMdMgOluQjp6o6j2KAdtRBdCDS/QIU5THQDxJ9lBXjk1fiq9tITo/aXBvjZeD+gH/Apkh/0GbO8VQLiYYmNfqqAHHeXdltORn8N7C9lOa/UW3KM7QdXo6J0GFlBVQeTE/IGqhMS5PMln3 admin@admin-PC
    2、登陆你的github帐户。点击你的头像,然后 Settings -> 左栏点击 SSH and GPG keys -> 点击 New SSH key

    3、然后你复制上面的公钥内容,粘贴进“Key”文本域内。 title域,自己随便起个名字。

    4、点击 Add key。

    完成以后,验证下这个key是不是正常工作:

    $ ssh -T git@github.com

    Attempts to ssh to github
    如果,看到:

    Hi xxx! You've successfully authenticated, but GitHub does not # provide shell access.
    恭喜你,你的设置已经成功了。

    三、修改git的remote url
    

    使用命令 git remote -v 查看你当前的 remote url

    $ git remote -v
    origin https://github.com/someaccount/someproject.git (fetch)
    origin https://github.com/someaccount/someproject.git (push)
    如果是以上的结果那么说明此项目是使用https协议进行访问的(如果地址是git开头则表示是git协议)

    你可以登陆你的github,就像本文开头的图例,你在上面可以看到你的ssh协议相应的url,类似:

    

    复制此ssh链接,然后使用命令 git remote set-url 来调整你的url。

    git remote set-url origin git@github.com:someaccount/someproject.git

    然后你可以再用命令 git remote -v 查看一下,url是否已经变成了ssh地址。

    然后你就可以愉快的使用git fetch, git pull , git push,再也不用输入烦人的密码了 
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容

  • 本片内容转自CSDN http://blog.csdn.net/ithomer/article/details/7...
    五娃儿阅读 4,904评论 2 88
  • 声明:这篇文章来源于廖雪峰老师的官方网站,我仅仅是作为学习之用 Git简介 Git是什么? Git是目前世界上最先...
    横渡阅读 3,941评论 3 27
  • 天空是那样的低沉 天边偶有闪电一闪而过 耳边传来嘈杂的声音 汽车上机器嘟嘟声还伴着各种广告声 声声入耳 嗯,还有自...
    拾穗的时光阅读 119评论 1 2
  • 早早就收到了初中同学结婚的消息,而我被邀请为姐妹团其中的一个也早早有了期待。但是,这一天的天气特别反常,就好像闹脾...
    减肥的女孩阅读 124评论 0 0
  • 早上五点多,就被宝宝唤醒了,她在床上滚来滚去,我轻轻的呼唤她,"起床啦,宝宝",然后给她喂奶,再放到床上,她翻了几...
    龍叶阅读 399评论 0 0