zoukankan      html  css  js  c++  java
  • Git使用

    一:安装git

    1.1.linux安装

      1、安装git依赖包

        yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

      2、删除已有的git

        yum remove git

      3、下载git源码

        切换到你的包文件存放目录下

          cd /usr/src

        下载git安装包

          wget https://www.kernel.org/pub/software/scm/git/git-2.8.3.tar.gz

        解压git安装包

          tar -zxvf git-2.8.3.tar.gz

          cd git-2.8.3

        配置git安装路径

          ./configure prefix=/usr/local/git/

        编译并且安装

          make && make install

        查看git版本号

        git --version

        git已经安装完毕

      4、将git指令添加到bash中

        vi /etc/profile

        在最后一行加入

        export PATH=$PATH:/usr/local/git/bin

        让该配置文件立即生效

        source /etc/profile

    1.2.windows安装

           官网 https://git-scm.com/downloads下载安装即可。

    二:创建版本库

      1.创建目录

    $ mkdir learngit
    $ cd learngit
    $ pwd
    /Users/michael/learngit
    

      2.目录变成Git可以管理的仓库

    $ git init
    Initialized empty Git repository in /Users/michael/learngit/.git/
    

      瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

      3.创建文件

    #vi  ./learngit/readme.txt

      3.添加文件到版本库

      第一步,用命令git add告诉Git,把文件添加到仓库,文件readme.txt从工作区被提交到暂存区,但此时文件并没有真正进入到版本库当中,文件目前只处于一个中间状态。

    git add readme.txt
    

      

             第二步,用命令git commit告诉Git,把文件提交到仓库

       git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

             这个命令将处于中间状态的文件(暂存区的文件)提交到版本库中,这时才算真正完成了一次提交过程。

     #git commit -m "wrote a readme file"
    [master (root-commit) eaadf4e] wrote a readme file
     1 file changed, 2 insertions(+)
     create mode 100644 readme.txt
    

      

     三:远程仓库

      在继续阅读后续内容前,请自行注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

    3.1.ssh_key

      第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

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

        你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

        如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

      第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

      然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

           github-addkey-1

           点“Add Key”,你就应该看到已经添加的Key:

            github-addkey-2

        为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

        当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

        最后友情提示,在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。

        如果你不想让别人看到Git库,有两个办法,一个是交点保护费,让GitHub把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。另一个办法是自己动手,搭一个Git服务器,因为是你自己的Git服务器,所以别人也是看不见的。这个方法我们后面会讲到的,相当简单,公司内部开发必备。

        确保你拥有一个GitHub账号后,我们就即将开始远程仓库的学习。

        现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。

    3.2从远程库克隆

        首先,登陆GitHub,创建一个新的仓库,名字叫gitskills

        github-init-repo

        我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件:

        github-init-repo-2

        现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:

    $ git clone git@github.com:michaelliao/gitskills.git
    Cloning into 'gitskills'...
    remote: Counting objects: 3, done.
    remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
    Receiving objects: 100% (3/3), done.
    

      

        注意把Git库的地址换成你自己的,然后进入gitskills目录看看,已经有README.md文件了:

    $ cd gitskills
    $ ls
    README.md
    

      

    3.3.提交版本

        首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库:

        github-create-repo-1

        在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库:

        github-create-repo-2

        目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

        现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:

    $ git remote add origin git@github.com:michaelliao/learngit.git
    

      

      请千万注意,把上面的michaelliao替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。

      添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

      下一步,就可以把本地库的所有内容推送到远程库上:

    #git push -u origin master
    Counting objects: 20, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (15/15), done.
    Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
    Total 20 (delta 5), reused 0 (delta 0)
    remote: Resolving deltas: 100% (5/5), done.
    To github.com:michaelliao/learngit.git
     * [new branch]      master -> master
    Branch 'master' set up to track remote branch 'master' from 'origin'
    

      把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

      由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

    四:版本回退

      git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file

    # git log
    commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Fri May 18 21:06:15 2018 +0800
    
        append GPL
    
    commit e475afc93c209a690c39c13a46716e8fa000c366
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Fri May 18 21:03:36 2018 +0800
    
        add distributed
    
    commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Fri May 18 20:59:18 2018 +0800
    
        wrote a readme file
    

      回退到上个版本

    #git reset --hard HEAD^
    

      回退到历史版本

    #git reset --hard HEAD^
    跳到指定版本
    id号不用写全,前几位即可
    #git reset --hard 1094
    

      

    五:状态对比:

      1.状态查看

    #git status

    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        modified:   readme.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")

      git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

        2.不同对比

           已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看

    # git diff readme.txt 
    diff --git a/readme.txt b/readme.txt
    index 46d49bf..9247db6 100644
    --- a/readme.txt
    +++ b/readme.txt
    @@ -1,2 +1,2 @@
    -Git is a version control system.
    +Git is a distributed version control system.
     Git is free software.
    

      

    六: 撤销本机上修改

    #git checkout -- readme.txt
    

      命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

      一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

      一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

     七:分支

     7.1.创建与合并分支

      查看分支:git branch

      创建分支:git branch <name>

      切换分支:git checkout <name>

      创建+切换分支:git checkout -b <name>

      合并某分支到当前分支:git merge <name>

      删除分支:git branch -d <name>

    八:标签

    • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

    • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

    • 命令git tag可以查看所有标签。

    • 命令git push origin <tagname>可以推送一个本地标签;

    • 命令git push origin --tags可以推送全部未推送过的本地标签;

    • 命令git tag -d <tagname>可以删除一个本地标签;

    • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

  • 相关阅读:
    vue中根据手机类型判断是安卓、微信或IOS跳转相应下载页面
    冒泡排序、数组去重
    vue2中component父子组件传递数据props的使用
    filter 在CSS用的效果
    纪念一下——做事要踏实
    要先学会做人,再做事
    2014再见,2013你好!
    --initialize specified but the data directory has files in it. Aborting. 解决
    Unity 发生 System.TypeInitializationException: “”的类型初始值设定项引发异常。的错误
    C#和delphi交互传结构体的delphi接收不到问题
  • 原文地址:https://www.cnblogs.com/yaohong/p/9176966.html
Copyright © 2011-2022 走看看