• Git使用基础介绍


    git教程:
    一、git的简介:
        -git是分布式版本控制系统由Linus为Linux用C语言写的。
      -什么是集中式版本控制系统:
           版本库是集中存放在中央服务器,干活的时候用自己的电脑,
        所以要先从中央服务器取得最新的版本,然后开始干活,干完活后在将自己的活推送到服务器。
        缺点:必须联网。
      -什么是分布式版本控制系统:有一台充当中央服务器的电脑,但是这台电脑不仅仅用来方便交换大家的修改,
              没有他大家一样干活,只是交换修改不方便。
           优点:不必联网,     
        强大的分支管理
       
    二、Git的安装
        -在Windows上使用Git直接从官网上下载,然后按默认安装完成就行,安装成功后在菜单找到Git-Git Bash,弹出类似命令窗口的东西说明安装成功。
     安装成功后:
     $ git config --global user.name "Your Name"
        $ git config --global user.email "email@example.com"
    三、创建版本库
    1、什么是版本库?版本库就是仓库英文repository相当于目录,目录里面的文件都可以被Git管理,
    每个文件删除,修改,Git都可以追踪,以便任何时候都可以追踪历史,或者在将来某个时刻可以被还原。
    2、开始创建,版本提交:
         -建一个空的文件夹
      -在文件夹中创建一个文件
      -在git bash命令中,在该目录下使用命令 git init进行初始化,此时文件夹下会出现一个.git文件夹,如果看不见,请选择显示隐藏文件夹。
      -在使用git add file 命令,将文件加入管理仓里。命令,将文件加入管理仓里。
      -使用命令 git commit -m "wrote a readme file "
     
      git commit命令后面-m输入本次提交的说明,可以输入任何信息。
      -为什么需要add,commit两步:因为commit可以一次提交多个文件,所以可以多次add文件
      -git status命令:让我们时刻掌握着仓库当前的状态。
      -git diff+文件:显示具体更改的内容。
      -查看更改情况后再将文件提交到仓库git add
    3、版本回退:
         -git log 查看日志 最近三次的更改情况
      -git reset --hard HEAD^回退到上个版本号
        HEAD当前版本 HEAD^上个版本 HEAD^^上上个版本,HEAD~100回退到100个版本。
      -当回退到上个版本了,再想回来就必须找到commit id。Git提供了一个命令git reflog来记录每一次的命令。
      git reset --hard commit_id
    4、工作区和暂存区
         - Git和其他版本控制系统SVN等的不同之处就是暂存区。
         -工作区就是文件夹
         -工作区里面有个隐藏的.git目录,这个不算工作区,而是Git的版本库。
         Git的版本库有很多东西,其中最重要的就是stage(或index)的暂存区,Git为我们自动创建了第一个分支master,以及master的指针HEAD
      -第一步git add 文件名 把文件往Git版本库中添加进去,实际上就是把文件修改添加到暂存区。
      第二部git commit提交更改,实际上就是把暂存区的内容提交到当前分支。
    5、撤销修改:
        -当改乱了工作区某个文件的内容,想直接丢掉工作区的修改时,用git checkout --file
     -当你不但改乱了工作区某个文件的内容,还添加到 了暂存区时,想丢弃修改,分两步
     第一步:git reset HEAD<file>然后回到场景1按照场景一操作。

    6、删除文件:
    - rm text.txt
    -当git知道删除了文件,工作区和版本库就 不一致了,git status命令就会告诉那些文件被删除了。
    -此时有两种做法:-1、确定在版本库中删除该文件,用命令git rm test.txt删掉然后commit.
    --2、删除了版本库里面还有,可以轻松的将文件恢复到最新版本。git checkout --test.txt.
    -git checkout 其实是笨笨酷里面的版本替代工作区的版本,无论是修改还是删除,都可以一键还原。

    四、远程仓库
    1-、git是分布式版本仓库控制系统,同一个git仓库可以分布到不同的机器上。
     -最早,只有一台机器有一个原始版本库,此后的机器可以克隆这个原始的版本库,而且每台机器的版本仓库其实都是一样的。
    2-、搭建远程仓:
     -GitHub是一一个提供git仓库托管的网站。
    本地仓库和GitHub仓库之间的传输是通过ssh加密的,所以需要设置:
     -第一步:创建ssh key,在主目录下查看是否有.ssh,如果有查看是否有id_rsa和id_rsa.pub文件,如果有直接跳过该步。
              如果没有,打开shell(Windows下打开git bash)创建ssh key。
        -$ssh-keygen -t rsa -C"your email@example"
        -在.ssh目录下面找到.id_rsa和id_rsa.pub这就是ssh key的两个秘钥,id_rsa是私钥,id_rsa.pub是公钥。
     -第二步:登录GitHub,在account setting,ssh key页面进行设置。
               点击Add ssh key填上任意title,在key文本框里面粘贴id_rsa.pub点击add ssh就已经添加key。
       为什么需要ssh?因为GitHub需要识别出推送的是你提交的,而不是别人冒充的,而git支持ssh协议,所以GitHub知道你的公钥就可以确定只有你才能推送。
       GitHub允许添加多个key。    
    五、添加远程仓:
       1-、现在已经在本地创建了一个git仓库后,又想在GitHub上创建一个git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库就既可以作为备份,又可以让别人通过该仓来协助。
        -、登录github后create a new repository,在repository name中填入仓库名字learngit,其他保持默认,就成功创建了一个git仓库。
       2、目前在github上的learngit还是空的,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后把本地仓库的内容推送到github仓库。
       3、在本地仓运行命令:
          - $git remote add origin git@github.com:yourusername/learngit.git  
          -此时本地仓与远程仓关联。
      
       -将本地仓的内容推送到远程仓:
       $git push -u origin master
      
       由于第一次推送,远程仓中没有东西,加上参数-ugit不但会把本地仓的master分支推送到远程新的master分支,还会把本地的master分支和远程的master关联起来。
      在以后的推送或者拉去中就可以简化命令。
       $git push origin master
    六、从远程仓克隆:
        1-、先创建远程库,然后从远程库中克隆。
      -create a new repository
      -repository name:gitskill
      -选择initialize this repository with a README,这样github为我们创建一个README.md文件。
     2-、 远程库已经准备好了,下一步就是克隆:
      -、$git clone git@github.com:yourusername/gitskill.git
    七、分支管理:
        1-、当你创建了一个分支,别人看不见,还继续在原来的分支上正常工作,而你在自己分分支上干活,想提交就提交,知道开发完毕,再一次性的合并到原来的分支上。
        2、创建与合并分支:
           -创建分支,实际就是创建一个指针,head指向master,创建新指针后,如果合并则master会与新指针合并,回退就是删除指针。
       
        -创建dev分支,然后切换dev分支:
        -$git checkout -b dev
        -git checkout命令加上参数-b表示创建并切换,相当于:
        -$git branch dev
        -$git checkout dev
        -然后用git branch命令查看当前分支
        -$git branch:会列出所有分支,当前分支会标*
        -然后就可以在dev分支上正常提交。
        -切回master分支
         $git checkout master
      现在再查看,刚才添加的内容不见了,因为刚才提交的是在dev分支上,现在在master分支上。
        -现在把dev分支的工作成果合并到master分支上
            $git merge dev
      合并后就可以将dev分支删除了。
      $git branch -d dev
     3-、总结:
        -查看分支:git branch
        -创建分支:git branch <name>
        -切换分支:git checkout<name>
        -穿件切换分支:git checkout -b <name>
        -合并某个分支到当前分支:git merge <name>
        -删除分支:git branch -d<name>
    八、解决冲突:
        1-、创建新分支
         -$git checkout -b feature1
         -修改readme.txt文件
         -在feature1分支上提交
         -$git add readme.txt
         -$git commit -m "and simple" 
      -切换到master分支上:
       $git checkout master
       git会自动提示我们当前master分支比远程的master分支要超前1个提交
       在master分支上把readm.txt文件最后一行改为&simple
       -提交:$git add readme.txt
              $git commit -m "&simple"
         -现在master和feature1各自分别有了新的提交。
      -在这种情况下,git无法执行快速合并,只能试图把自己修改的合并起来,但是这种合并可能会有冲突。
      -当查看readme.txt文件时会标出分支不同的内容分。
      -我们修改为文件如下:
      Creating a new branch is quick and simole.
      -用带参数的git log看分支合并的情况:
      $git log --graph --pretty=online --abbrev-commit
      -最后删除feature1分支
      $git branch -b feature1
      2、总结:
             -先创建分支,修改文件,在分支上提交。
             -切换到master,修改文件,在分支上提交。
       -合并,出现错误。
       -查看文件,看两个分支的不同手动修改文件
       -提交,删除创建新分支。
       -完成。
    九、分支策略:
        1、通常合并时,如果可能,git会用Fast forward模式,但是这种模式下,删除分支,会丢掉分支信息。
           如果禁用Fast forward模式,git就会在merge时生成一个新的commit,这样,从分支既可以看出分支信息。
     2、创建新分支:  
        -$git checkout -b dev
        -修改文件,并提交新的commit
        -切回master:
        $git checkout master
        -合并分支:
        $git merge --no-ff -m "merge with no-ff"dev
        本次要创建一个新的commit所以带-m
        -然后用git log --graph --pretty=oneline --obbrve-commit
        查看。
      3、在实际开发中应按照几个基本原则进行分支管理。
       -master非常稳定,也就是仅用来新版本发布,平时不能在上面干活。
       -平时都在分支上干活,分支是不稳定的。到某个时候,再把分支合并到master上。每个人都在分支上干活,是不是的合并到分支上就可以了。
     
    九、bug分支
        1-、软件开发中遇到需要修复的bug时,需要将当前的分支进行工作现场存储。
       -$git stash。
       等以后恢复现场后继续工作。
       -git status查看工作区
       -git stash list 查看存储的工作现场
       -1、git stash apply恢复,但是stash内容并没有删除,还需要
        git stash drop进行删除
       - 2、git stash pop 恢复并删除。
    十、feature分支
        1-、在开发的过程中,新功能不断的添加进来,为了不让一些实验性的代码把主分支搞乱,每次添加新功能的时候,最好新建一个feature分支。在上面开发,完成后,合并最后删除该feature分支。
       -创建新分支:
       $git checkout -b feature2
       -添加新功能:
       git add vulcan.py
       -切回dev,准备合并
       git checkout dev
       -feature分支和bug分支类似,合并然后删除
       -此时需要删除分支,但是删除不了必须d大写D
       $git branch -D feature2
    十一、多人协作
        1-、-查看远程库信息,使用git remote -v 
         -本地新建的分支如果不推送到远程,其他人是不可见的。
      -从本地推送分支,使用git push orgin branch-name如果推送失败,先用git pull抓取远程的新提交。
      -在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name
      -建立本地分支和远程分支的关联,使用git checkout --set-upstream branch-name orgine/branch-name.
      -从远程抓取分支,当本地链接与远程链接不一致的时候会报错,此时根据提示设置链接,再使用git pull 如果有冲突,要先处理冲突。
    十二、Rebase
         git rebase将分叉变成一条直线。
    十三、标签:
          1、git tag <tagname>  用于新建一个标签,默认为HEAD,也可以指定一个commit id
       2、gti tag -a<tagname>-m"..."可以指定标签信息
       3、git tag可以查看所有标签。
       3、删除标签git tag -d v0.1
       4、创建的标签都只存在本地,不会自动推送到远程,所以打错的标签可以在本地安全的删除。
          如果要推送某个标签到远程,使用命令:
       git push origin<tagname>
       或者一次性推送全部尚未推送到远程的本地标签
       git push origin --tags
       5、如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除
          git tag -d v0.9
       然后再删除远程,删除命令也是push
       git push origin :refs/tags/v0.9
      
     
     
      
     
       
     
      
        
      
     
     

      
     
     

     
  • 相关阅读:
    [译]JavaScript源码转换:非破坏式与再生式
    [译]ES6中的代理对象
    tensorflow 如何获取graph中的所有tensor name
    python3中的str和bytes
    git submodule 添加 更新 删除 教程
    《重构:改善既有代码的设计》摘抄
    thrift入门教程/thrift资料集合
    将python2代码升级为python3代码最佳实践
    python标准库:subprocess——子进程管理
    安装“python-snappy”遇到“error: command 'x86_64-linux-gnu-gcc' failed with exit status 1”
  • 原文地址:https://www.cnblogs.com/lsb123/p/10558821.html
Copyright © 2020-2023  润新知