zoukankan      html  css  js  c++  java
  • git 命令和使用场景总结

    资料地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

           http://www.cnblogs.com/wupeiqi/p/7295372.html

    一、git的起源 ?

      git是Linux的创始人Linus为了管理linux的版本而花了两个星期写的。之前用过一段时间BitKeeper这个软件,

      后来闹出矛盾了,一个道歉就可以解决的事,作为一个特立独行的大牛,Linus索性自己搞。

      所以之后才能出现git和基于git的全球最大同性交友网站github。

      大牛任性改变历史,普通人任性只能改变自己。

    二、git的作用?

      从起源可以看出来,可以用作版本管理,特别是多人协作的情况下,在当今集团军作战的时代,git已经成为必不可少的分布式版本控制工具。

    三、 git的安装?

      没有特殊的

      windows 官网下载

      Linux yum install git

      

    四、git 命令大全

    五、 git 原理 

       git 把当前文件夹在生成一个 .git 文件夹用作版本控制库,这个文件夹以后可能会很大,因为所有代码都存放在里面。

      分为隔离的四个区,通过不同命令实现内容改变,换句话说你做的所有改变的代码,都被作为素材提交到库中。

      当我们需要回到哪个时刻,就把素材按照当时顺序组织,所以在内存角度没变多少,所以版本更替很快。

      HEAD,一个指针,代表当前处理的版本

      master,主分支,代表我们主要的版本

      dev,测试分支,代表我们公司开发版本

      xxx,自己名字,代表自己负责工作分支

      平时master稳定运行,自己做完把自己分支向dev分支上merge,公司安排测试等测试dev版本,ok了运维部门安装到服务器,也就是上线。

     

     

    分支合并简单情况,修改-----保存

    分支合并冲突情况,解决冲突。前后冲突的文件中,冲突的内容两者都会显示,需要人工手动选择一个,修改完毕,再提交。

    六、使用场景总结:

    本地开始

    $ pwd                   # 显示当前目录
    $ git init                # git初始化
    $ git status                        # 查看当前git状态
    $ git add .                         # 添加当前目录下所有文件到版本库
    $ git commit -m '第一次提交'          # 提交到版本库,并填写版本说明,以便以后回滚。
    $ ls                                # 查看目录下文件
    $ touch a.py                        # 创建新文件
    $ git log                           # 查看历史版本提交记录(根据版本commit值可以进行回滚)
    $ git reset --hard 版本号            # 工作区向历史滚
    $ git reflog                        # 查看回滚记录
    $ git reset --hard 0972f4b          # 工作区向未来滚
    $ git checkout -- file # 撤回工作区修改,让这个文件回到最近一次git addgit commit时的状态。这两个点相当于单机游戏中的存档点,执行就保存一次状态
    $ git reset HEAD file # 撤回提交到暂存区的修改,工作区未退回,
    $ git rm file # 删除文件,需要commit
    $ git commit
    $ git tag # 查看所有标签
    $ git show tagename # 查看便签详细
    $ git tag -a tagname -m message commit_id # 给commit创建标签,方便以后查看,默认是打在HEAD上
    $ git tag -d tagname # 删除本地便签
    $ git push origin tagname # 推送标签到远程库,便签不推不会到远程库
    $ git push origin --tags # 推送全部标签

    新功能开发方案

    $ git branch dev                           # 创建新分支,即:拷贝一份当前所在分支代码到新分支
    $ git checkout dev                         # 切换到dev分支
    $ vim app01/views.py                       # 开发功能
    $ git status                               # 查看状态,即:在dev分支修改了app01/views.py文件
    $ git add .                                # 将修改文件添加到版本库的暂存区
    $ git commit -m '新功能开发完毕'             # 将暂存区的内容提交到当前所在分支,即:dev分支
    $ git checkout master                      # 切换回master分支 
    $ git merge dev                            # 将dev分支内容合并到master分支


    $ git branch -d dev # 新功能没完成,老板说不要了
    $ git branch -D dev # 还没提交就不要了,强制删除


    新功能开发中去修复bug之stash方案

    $ vim app01/views.py                               # 开发直播功能,刚开发到一半 ,不想提交
    $ git status
    $ git stash                                        # 将开发到一半的直播功能,临时存储到“某个地方”
    $ git status                                       # 工作区回到当前版本未做任何操作前
    $ vim pondo/settings.py                            # 紧急修复bug
    $ git add .                                        # 添加到修改bug的代码到暂存状态
    $ git commit -m '紧急修复bug'                       # 提交修复Bug的代码到分支
    $ git stash pop                                    # 将开发到一半的直播功能从“某个地方”再次拿会工作区继续开发
    
    stash 命令
      git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
      git stash list 查看“某个地方”存储的所有记录
      git stash clear 清空“某个地方”
      git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
      git stash apply 编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
      git stash drop 编号,删除指定编号的记录
    
    例子
    a. 原来内容:
      from django.shortcuts import render,HttpResponse
    
      def index(request):
        return render(request,'index.html')
    
      def africa(request):
        return HttpResponse('非洲专区')
    
    
    b. 在a基础上开发到一半直播功能:
      from django.shortcuts import render,HttpResponse
    
      def index(request):
        return render(request,'index.html')
    
      def africa(request):
        return HttpResponse('非洲专区')
    
    
      def live(request):
        print('开发到一半')
        return HttpResponse('....')
    
    
    c. 执行git stash,回到当前版本未修改状态a:
      from django.shortcuts import render,HttpResponse
    
        def index(request):
          return render(request,'index.html')
    
        def africa(request):
          return HttpResponse('非洲专区')
    
    d. 修复Bug并提交:
      from django.shortcuts import render,HttpResponse
    
        def index(request):
          return render(request,'index.html')
    
        def africa(request):
          return HttpResponse('非洲xxxxx专区')
    
    
    e. 继续开发直播功能 git stash pop,此时会出现冲突:
    
      $ git stash pop
      表示app01/views.py存在冲突需要解决,此时文件内容为:
    
      from django.shortcuts import render,HttpResponse
    
        def index(request):
          return render(request,'index.html')
    
        def africa(request):
        <<<<<<< Updated upstream:                # 修复Bug时更改的内容
          return HttpResponse('非洲xxxx区') 
        =======                                   # 修复Bug前正在开发新功能时的内容
          return HttpResponse('非洲专区')
    
        def live(request):
          print('刚开发到一半')
          return HttpResponse('直播功能')
        >>>>>>> Stashed changes
    
    
    需要自行解决冲突,然后继续开发,如:
    
        from django.shortcuts import render,HttpResponse
    
          def index(request):
            return render(request,'index.html')
    
          def africa(request):
    
            return HttpResponse('非洲xxxx区') 
    
          def live(request):
            print('刚开发到一半')
            return HttpResponse('直播功能')

    新功能开发中去修复bug之修补bug分支方案

    $ git branch                             # 当前在master分支
    $ git branch dev                         # 创建dev分支用于开发新功能
    $ git checkout dev                       # 切换到dev分支
    $ vim app01/views.py                     # 开发新功能到一半,需要紧急修复Bug
    $ git add .
    $ git commit -m '新功能开发一半'
    $ git checkout master                    # 切换回master分支
    $ git branch bug                         # 创建修复bug分支
    $ git checkout bug                       # 切换到bug分支
    $ vim pondo/settings.py                  # 修改bug
    $ git add .                              # 提交bug
    $ git commit -m '紧急修复bug'             # 提交bug
    $ git checkout master                    # 切换回master
    $ git merge bug                          # 将bug分支内容合并到master分支,表示bug修复完毕,可以上线
    $ git checkout dev                       # 切换到dev分支,继续开发新功能
    $ vim app01/views.py                     # 继续开发其他一半功能
    $ git add .                              # 提交新功能
    $ git commit -m '继续开发完成'             # 提交功能
    $ git checkout master                    # 切换回master分支
    $ git merge dev                          # 将dev分支合并到master分支
    
    
    branch相关常用命令:
      git branch 分支名称 创建分支
      git checkout 分支名称 切换分支
      git branch -m 分支名称 创建并切换到指定分支
      git branch 查看所有分支
      git branch -d 分支名称 删除分支
      git merge 分支名称 将指定分支合并到当前分支



    在家第一次推送远程库(github)

    $ git remote add origin 地址             # 为地址起一个别名origin
    $ git push origin master                # 将本地master分支内容以及版本信息推送到GitHub
    Username for '':                        # 输入GitHub用户名
    Password for '':                        # 输入GitHub密码
    $ git push origin dev                   # 将本地dev分支内容以及版本信息推送到GitHub


    在公司第一次使用远程库继续开发

    $ git clone https://github.com/WuPeiqi/pondo.git       # 将项目从GitHub中获取
    $ cd pondo/                                            # 切换到工作目录
    $ git branch                                           # 默认获取到得只有master分支
    $ git branch dev origin/dev                            # 创建dev分支且和远程dev分支同步
    $ vim app01/views.py                                   # 继续开发新功能
    $ git add .                                            # 添加文件到版本库的暂存状态
    $ git commit -m '公司开发功能1'                          # 提交新功能到版本库的分支
    $ git push origin dev                                  # 提交dev分支内容到远程GitHub托管仓库的dev分支
    Username for '':
    Password for '':


    回家继续开发

    $ git checkout dev                            # 切换到dev分支
    $ git pull origin dev                         # 从远程GitHub仓库获取dev分支最新内容,并合并到本地
    $ vim app01/views.py                          # 继续开发新功能
    $ git add .                                   # 添加文件到版本库的暂存状态
    $ git commit -m '家里开发功能1'                 # 提交新功能到版本库的分支
    $ git push origin dev                         # 提交dev分支内容到远程GitHub托管仓库的dev分支
    Username for '':
    Password for '':
     


    回公司继续开发

    $ git checkout dev                            # 切换到dev分支
    $ git fetch origin dev                        # 从GitHub仓库获取dev分支最新内容到版本库的分支
    $ git merge origin/dev                        # 将版本库的分支内容合并到工作区
    $ vim app01/views.py                          # 继续开发新功能
    $ git add .                                   # 添加文件到版本库的暂存状态
    $ git commit -m 'xxxxxxxxxxx'                 # 提交新功能到版本库的分支
    $ git push origin dev                         # 提交dev分支内容到远程GitHub托管仓库的dev分支
    Username for '':
    Password for '':
     

    设置密钥(解决每次都要输入用户名,密码):

    1. $ ssh-keygen -t rsa -C "youremail@example.com"        #配置密钥
    2. 一直默认回车
    3. .ssh目录,里面有id_rsaid_rsa.pub两个文件,一个密钥,一个公钥
    4. 将公钥复制给github


    多人协作工作模式 :

      

    1. 先pull下最新的版本,与本地合并
    
    2. 工作
    
    3. 所有人轮流push,(第一个只用push,其他人要先pull,再push,因为前人已经做了修改)

      

  • 相关阅读:
    大话设计模式C++ 适配器模式
    36. Valid Sudoku
    c++ 常用的数据结构
    《大话设计模式》c++实现 状态模式
    c++ 各种类型转换
    38. Count and Say
    《大话设计模式》c++实现 抽象工厂模式
    66. Plus One
    49. Group Anagrams
    《大话设计模式》c++实现 建造者模式
  • 原文地址:https://www.cnblogs.com/xinghuaikang/p/8507135.html
Copyright © 2011-2022 走看看