git 命令和使用场景总结

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

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

1、git的起源 ?git

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

  后来闹出矛盾了,一个道歉就能够解决的事,做为一个特立独行的大牛,Linus索性本身搞。django

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

  大牛任性改变历史,普通人任性只能改变本身。windows

2、git的做用?服务器

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

3、 git的安装?运维

  没有特殊的

  windows 官网下载

  Linux yum install git

  

4、git 命令大全

5、 git 原理 

   git 把当前文件夹在生成一个 .git 文件夹用做版本控制库,这个文件夹之后可能会很大,由于全部代码都存放在里面。

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

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

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

  master,主分支,表明咱们主要的版本

  dev,测试分支,表明咱们公司开发版本

  xxx,本身名字,表明本身负责工做分支

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

 

 

 

 

 

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

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

 

 

 

 

6、使用场景总结:

 

本地开始

$ 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 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 addgit commit

新功能开发方案

$ 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. 一直默认回车
目录,里面有和两个文件,一个密钥,一个公钥
4. 将公钥复制给github
3. .sshid_rsaid_rsa.pub

 


多人协做工做模式 :

  

1. 先pull下最新的版本,与本地合并

2. 工做

3. 全部人轮流push,(第一个只用push,其余人要先pull,再push,由于前人已经作了修改)
相关文章
相关标签/搜索