zoukankan      html  css  js  c++  java
  • Git学习总结

    Git基本操作

    • 安装git

      sudo apt-get install git

    • 创建版本库

      git init

    • 版本创建与回退

      • 版本创建

        • 加入暂存区

          • 文件修改或增加后

            git add filename

          • 删除文件

            git rm filename

            或者

            rm filename

            git add filename

        • 提交暂存区内容到版本库

          git commit -m 'version name'

      • 版本记录查看

        git log

        • 以简短形式查看

          git log --pretty=oneline

        • 仅查看少数记录

          git log -n

        • 以连接线形式查看

          git log --graph

      • 版本回退

        git reset --hard HEAD^

        git reset --hard HEAD~3

      • 撤销版本回退

        git reset --hard commit_id

        查看操作记录

        git reflog

    • 工作区和暂存区

      • 工作区:就是工程项目所在目录
    • 暂存区:.git文件夹是git的版本库,其中最重要的就是称为stage的暂存区,还有git 自动创建的第一个分支master,以及指向master的指针HEAD(每次commit后HEAD指向最新版本),git add把文件修改添加到暂存区,git commit提交修改,实际上就是把暂存区的所有内容提交到当前分支

    • 查看工作区状态命令

      git status

    • 撤销修改

      • 修改后未进行git add/rm的情况

        git checkout -- filename

      • 修改后已进行git add/rm的情况

        • 首先取消暂存区该文件的暂存

          git reset HEAD filename

        • 再使用上面命令进行复原

          git checkout --filename

      • 修改后已进行git add git commit

        只能进行版本回退来恢复

    • 对比文件不同

      • 对比工作区和某个版本中文件的不同

        git diff HEAD_pointer -- filename(In the working directory)

        ---对应HEAD指向版本的文件,+++代表工作区中文件

      • 对比两个版本中文件的不同

        git diff HEAD HEAD^ -- filename

        ---对应HEAD版本的文件

        +++对应HEAD^版本的文件

    Git 分支操作

    多个分支可以理解为互不干扰的流水线

    • 分支基本操作

      • 分支创建与合并

        默认在主分支mater上进行操作,HEAD严格来说不是指向commit,而是指向分支,分支的指针才是指向提交的,即HEAD指向的是当前分支

        创建新分支一定程度上可以理解为创建了一个新的分支指针

        • 查看当前有几个分支和当前所在分支

          git branch

          *表示当前HEAD所指向的分支

        • 创建分支

          git branch branchname

        • 切换分支

          git checkout branch_name

        • 创建并切换到新分支

          切换即改变HEAD所指向的分支

          git checkout -b branch_name

          新分支有旧分支的所有内容

        • 合并分支

          git merge branch_name

          fast-forward表示快速合并,即仅仅移动分支指针,默认情况下使用快速合并

    • 解决分支冲突

      即在两个分支中对同一个文件进行了commit

      此时合并时候存在分支冲突,此时用git status查看分支冲突对应的文件

      然后用编辑器查看相应文件,git用<<<<<<<,=======,>>>>>>>>标记出不同分支的内容,

      通过手动修改文件并进行add和commit后实现手动解决分支冲突

    • 分支管理策略

      合并分支是,如果可能,git默认使用fast forward模式,但是有些快速合并不能合并修改但不会产生分支冲突(例如在两个分支中分别修改了不同的文件),这个时候git会自动在合并之后做一次新的comit

      这种情况下会自动跳出GNU Nano,用来输入commit的注释

    • Bug分支

      • 强制禁用fast forward模式,git会在merge时生成一个新的commit

        git merge --no-ff -m 'annotation' branch_name

      • 储存和复原分支现场

        即需要切换到bug分支时,本分支的内容还未进行commit,则需要进行现场保存

        Bug修复过程

        • 将工作现场储藏起来

          git stash

        • 创建并切换到bug分支

      • 在该分支中修复bug后进行commit

        • 将bug分支与master分支进行禁用fast forward合并
    • 修复bug完成后回到原来编辑的分支继续
      - 查看分支现场储存列表

        `git stash list`
      
      - 恢复工作现场 
      
        `git stash pop`
      

    Github 使用

  • 相关阅读:
    mysql用户授权及数据备份恢复
    mysql数据库导入导出 查询 修改表记录
    mysql数据库 索引 事务和事务回滚
    mysql数据库基本使用(增删改查)
    B-Tree 和 B+Tree
    网络七层模型及TCP、UDP,一次HTTP请求都发生了什么
    堆排、python实现堆排
    Linux 文件系统
    现有n 个乱序数,都大于 1000 ,让取排行榜前十,时间复杂度为o(n), top10, 或者 topK,应用场景榜单Top:10,堆实现Top k
    Ajax 基础
  • 原文地址:https://www.cnblogs.com/Eric-Shenblog/p/10958111.html
Copyright © 2011-2022 走看看