zoukankan      html  css  js  c++  java
  • git&GitHub 入门(转载)

    版本管理控制工具两大优点:

      1.团队协作开发

      2.版本管理

      允许可以很容易对产品的版本进行任意回滚


    常用版本管理工具

      1.VSS-- Visual Source Safe

      2.CVS--Concurrent Versions System

      3.SVN --CollabNet Subversion

      4.BitKeeper

      5.GIT


    git安装

      Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行


    版本库创建

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

      步骤:

      1.在一个自定义的磁盘下创建一个空目录

    $ mkdir git_trainning
    $ cd git_trainning

       2.初始化git

    $ git init

       此时git仓库就建好了,此时的仓库是一个空的仓库。

      当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。


    将文件添加到文本库

      所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外

      而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

       Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的

      步骤:

      1.编写一个first_git_file.txt文件【一定要放到git_trainning目录下(子目录也行)

    $ vim first_git_file.txt
     
    #文本内容
    first time using git, excited!
    第一次用git哈哈

       2.用命令git  add 告诉git,把文件添加git暂存区

    $ git add first_git_file.txt

      执行上面的命令,没有任何提示,说明添加成功。

      3.用命令git  commit 告诉git,把文件从暂存区提交到仓库。

    $ git commit -m "commit my first git file"

      你在往git库里提交代码时,你需要告诉git你是谁,这样git就会纪录下来是谁改的代码,其实就是为了日后查询方便,你只需要提供一个名字和邮件地址就可以。

      你可以通过git config --global --edit修改

      -m 后面输入的是本次提交的说明,

       为什么Git添加文件需要addcommit一共两步呢?

       因为commit可以一次提交很多文件,所以你可以多次add不同的文件。

      如:

    $ git add file1.txt
    $ git add file2.txt file3.txt
    $ git commit -m "add 3 files."

    代码回滚

      1.代码修改并提交:

        代码修改后执行代码:

    $ git add .    # .  代表把当前目录下所有改动的文件都提交到代码库

         提交后我们可以查看仓库当前的状态:

    $ git status

         当记不清上次是怎么修改时,我们可以通过命令来查看:

    $ git diff first_git_file.txt
    diff --git a/first_git_file.txt b/first_git_file.txt
    index 2d13c2c..248d853 100644
    --- a/first_git_file.txt
    +++ b/first_git_file.txt
    @@ -1,3 +1,4 @@
    -first time using git, excited!
    +First time using git, excited! update ...
     insert line here...
     第一次用git哈哈
    +insert line again haha...

       输出中+号显示的就是修改或新增的内容,-号显示的就是去掉或被修改的内容

      2.代码回滚

      实际工作中,代码经过很多次修改后,版本控制系统有命令可以告诉我们历史记录。

      在Git中,我们用git log命令查看:

    $ git log
    $ git log --pretty=oneline

      git log命令显示从最近到最远的提交日志

      

      回滚到指定的版本号:

      首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交

      上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

      从当前版本回退到之前的版本要使用到git  reset 命令。

    #返回到上一个版本
    
    $ git reset --hard HEAD^

      此时用git  log再查看版本库的状态时最新的那个版本已经找不到了。

      此时你还想找到最新的那个版本的话可以通过HEAD指向版本号来找回最新的版本。

    #当命令行关闭找不到版本号时可通过此操作来找到
    
    $ git reflog

    工作区和暂存区

      工作区里有一个隐藏目录 .git,这个不算工作区,而是Git的版本库。

      版本库里有称为stage(或者叫index)的暂存区,还有git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

      

      前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

      第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

      第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

      因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

      可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。


     撤销修改

      分两种情况:

      1.还在工作区的情况

        删掉最后一行,手动把文件恢复到上一个版本的状态。

        如果用git status查看一下:

     1 git status
     2 
     3 On branch master
     4 Changes not staged for commit:
     5   (use "git add <file>..." to update what will be committed)
     6   (use "git checkout -- <file>..." to discard changes in working directory)
     7  
     8     modified:   readme.md
     9  
    10 no changes added to commit (use "git add" and/or "git commit -a")

        git checkout -- file可以丢弃工作区的修改。

      2.还在暂存区的情况

        git add到暂存区。庆幸的是,在commit之前,你发现了这个问题。用git status查看一下,修改只是添加到了暂存区,还没有提交

    $ git status
    
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
     
        modified:   readme.md

        用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:

    $ git reset HEAD readme.md
    
    Unstaged changes after reset:
    M   readme.md

        git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

        再用git status查看一下,现在暂存区是干净的,工作区有修改

    $ 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.md
    #
    no changes added to commit (use "git add" and/or "git commit -a")

        丢弃工作区的修改

    $ git checkout -- readme.md

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

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

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

        总之,就是让这个文件回到最近一次git commitgit add时的状态。

        git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。


    删除操作

      一般情况下,通常直接在文件管理器中把没用的文件删了,或者用rm命令删了

      这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

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

      现在你有两个选择,

      一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

    $ git rm test.txt
    
    rm 'test.txt'
     
    $ git commit -m "remove test"
    
    [master 03df00a] remove test
     1 file changed, 0 insertions(+), 0 deletions(-)
     delete mode 100644 test.txt

      现在,文件就从版本库中被删除了。

      另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

    $ git checkout -- test.txt

      git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。


    GitHub(远程仓库)

  • 相关阅读:
    AI工程师职业规划和学习路线完整版
    Python基础面试题库
    Python运行的17个时新手常见错误小结
    一文总结学习 Python 的 14 张思维导图
    NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)
    超过 150 个最佳机器学习,NLP 和 Python教程
    任泽平:95页PPT分析2018(经济、房价、政策)
    为什么量化交易中稳定盈利是第一要义
    使用tushare获取股票实时分笔数据延时有多大
    5行代码实现1秒内获取一次所有股票的实时分笔数据
  • 原文地址:https://www.cnblogs.com/jjb1997/p/11203739.html
Copyright © 2011-2022 走看看