• 爆玩GIT


    认识GIT

    git是一个开源的分布式(远程和客户端都保存有所有版本,而集中式仅远程有所有版本记录)的版本控制软件,高效进行版本管理。

    git主要是在本地项目目录下生成.git文件夹,存储各种修改记录和版本,如果想要远程共享或协同开发,就需要用到远程代码托管平台(如阿里云,github,gitlab等)

     GIT操作(本地)

    git init                              创建.git文件夹

    git status                      查看当前git状态(红色代表被修改过或未添加至版本库,绿色代表版本库暂存状态)

    git add "文件名"                                添加当前目录下所有文件到版本库

    git commit -m "本次提交描述"             对当前版本添加进行描述,并将暂存区文件提交到版本库的分支

    • git config --local user.name 'lamb                       提交用户
    • git config --local user.email 'lamb@example.com'   提交用户邮箱地址

    git log                           查看历史版本记录

    git reflog                                                                             回滚后git log不好使了,需要git reflog查看历史所有版本  

    修复bug的两种方式:

    方案1 stash

    git stash                                                                              将正在开发且未完成的内容临时存储于某个地方

    git status                                                                             工作区回到当前版本未做任何操作前

    紧急修复bug => git status => git add . =>  git commit -m "紧急修复"     

    git stash pop                                                                       将未完成的那部分代码拿出来继续开发(可能出现冲突)   

    冲突:如果紧急修复bug的代码和临时存放区代码有重合部分,则可能出现冲突 。自行解决冲突,提交。

    常用命令:   git stash                                                        将当前工作区所有修改过的内容存储到某个地方,将工作区还原到当前版本未修改过的状态

          git stash list                                                  查看临时存储地的所有记录

          git stash clear                                               清空临时存储地记录

          git stash pop                                                 将第一个记录从“临时存放区域”拿到工作区(可能出现冲突)

          git stash apply                                               将某个编号的文件从“临时存放区域”拿到工作区(可能出现冲突)

          git stash drop                                                将某个编号的文件从“临时存储区域”删除

    方案2 branch

    branch成为分支,默认仅有一个master 分支

    一般开发新功能流程:

      git branch dev                                                              创建一个名为dev的分支

      git checkout dev                                                           切换到dev分支

      开发功能

      git status                                                                        查看状态

      git add .                                                                           将修改过的文件添加到版本库的暂存区

      git commit -m "新功能开发完毕"                                    将暂存区的内容提交到当前所在分支,即dev分支

      git checkout master                                                        切换回master分支

      git merge dev                                                                   将dev分支内容合并到master分支

    流程增强版:

                                                               

    git branch(当前在master分支)  => 

    git branch dev(创建dev分支,用于开发新功能)  => 

    git checkout dev(切换到dev分支)  => 

    开发新功能(开发到一半,需紧急修复bug)  => 

    git add .  =>  git commit -m "新功能开发一半"  => 

    git checkout master(切换到master分支)  => 

    git branch bug(创建bug分支)  =>

    git checkout bug(切换到bug分支)  =>

    修改bug  =>

    git add .  (提交修复结果)  =>

    git commit -m "紧急修复bug"  =>

    git checkout master(切换到master分支)  =>

    git merge bug(将bug分支合并到master分支,表示bug修复完毕,可以上线)  =>

    git checkout dev(切换到dev分支,继续开发新功能)  =>

    继续开发  =>

    git add .(新功能开发完成,添加到暂存区)=>

    git commit -m "新功能继续开发完成"  (提交功能到dev分支)=>

    git checkout master(切换到master分支)  =>

    git merge dev(将dev分支合并到master分支)

    branch相关常用命令:

      git branch          查看所有分支名称

      git branch "分支名称"            创建分支

      git checkout "分支名称"     切换分支

      git branch -m "分支名称"            创建并切换到指定分支

      git branch -d "分支名称"             删除指定分支

      git merge "分支名称"                   将指定分支合并到当前所在分支

     GIT操作(代码托管github)

    基于github代码托管步骤:

    • 注册github
    • 创建仓库,即获得URL代指该仓库
    • git可以使用该url向远程推送版本信息或获取版本信息

    将本地代码推送至远程(家):

      git remote add origin http://github.com/lamb/lalala.git      #为远程地址起一个别名origin

      git push origin master                    #将本地master分支内容以及版本信息推送到github指定仓库

      git push origin dev                                                                            #将本地dev分支内容以及版本信息推送到github指定仓库

    将远程代码下载到本地开发(公司):

      git clone http://github.com/lamb/lalala.git             #将项目从github上获取

      git branch                         #默认获取到的只有master分支

      git branch dev origin/dev                                                                  #创建dev分支并和远程dev分支同步

      git checkout dev                                                                                #切换到dev分支

      继续开发新功能

      git add .                           #添加文件到版本库暂存区

      git commit -m "公司新功能一"                #提交新功能到版本库分支

      git push origin dev                     #将dev分支内容推送至远程托管仓库的dev分支

     回到家:

      git checkout dev                      #切换到dev分支

      git pull origin dev                      #从远程github上获取dev分支最新内容,并合并到本地

      继续开发新功能

      git add .    =>    git commit -m "家里开发功能一" 

     来到公司:

      git checkout dev    =>    git fetch origin dev(从github仓库获取dev分支最新内容到版本库的分支)  =>    git merge origin/dev(将版本库的分支内容合并到工作区)    =>    继续开发新功能    =>    git add .    =>    git commit -m "....."

    注:git和github结合可以做到避免电脑损坏造成项目丢失和多地开发问题,上文中git pull origin "分支名称"  等同于    git fetch origin "分支名称" + git merge origin/分支名称

     GITHUB(多人协同开发)

    • 合作:将其他用户添加至仓库合作者中之后,该用户就可以向当前仓库提交代码

    • 组织:创建一个组织,然后可以在该组织下创建多个项目,组内成员可以向组内所有项目提交代码,也可以对某个项目指定合作者

    协同开发流程

    • 创建程序
      • 用户A创建项目,提交到github
      • 用户B克隆项目
      • 用户C克隆项目
    • 开发功能
      • 用户A开发功能1
      • 用户B开发功能2
      • 用户C开发功能3
    • 提交
      • 用户A提交功能1,并push
      • 用户B提交功能2,将无法push,因为github上已经有其他人提交的新代码
        • 从github上获取最新代码,并合并到本地,提交
          • 方法1:git pull origin master    =>    git push origin master(日志记录会有分叉)
          • 方法2:git fetch origin master    =>    git merge origin/master    =>    git push origin master(日志记录会有分叉)
          • 方法3:git fetch origin master    =>    git rebase origin/master    =>    git push origin master(日志记录干净整洁)
      • 用户C提交功能3,无法push,无法提交,因为github上已经有其他人提交的新代码
        • 从github上获取最新代码,并合并到本地,提交
    • 获取最新代码
      • 用户A获取最新代码
      • 用户B获取最新代码
      • 用户C获取最新代码

     GITHUB(为别人贡献代码)

    • 找到项目,fork一下,代码就会保存到自己的代码仓库

    • 从自己仓库获取代码,并进行编辑提交
    • 创建并提交一个pull request,等待同意,若同意,就提交成功

    配置文件:

    • 系统配置:/private/etc/gitconfig
    • 用户配置:~/.gitconfig
    • 项目配置:.git/config

    用户凭证(解决频繁授权问题):

    • 私钥
      • ssh-keygen -t rsa(创建一对秘钥)
      • id_rsa.pub(即公钥,拷贝到github)
      • 注:git@github.com:lamb/xxx.git
    • 密码
      • Https访问git时,避免每次操作需要输入用户名和密码,可以在配置文件中添加如下配置项:
            [credential]
            helper = store/cache/第三方

        store:
                表示将用户名和密码保存在硬盘上
                第一次输入过用户名和密码之后,用户名和密码就会保存在当前用户根目录的 .git-credentials 文件中,内容格式为:https://用户名:密码@github.com

                自动添加配置命令:git config credential.helper store
        cache: 
                表示将用户名和密码保存在缓存中
                第一次输入过用户名和密码之后,用户名和密码就会保存在缓存中,默认超时时间是 900 秒,缓存相关文件保存在当前用户根目录的 git-credential-cache 中 
                自动添加配置命令:
                       git config credential.helper cache
                       git config credential.helper 'cache --timeout=300'

        相关操作:
                清除缓存:git credential-cache exit 
                指定超时:
                    [credential]
                    helper = cache --timeout=300
        注意:
                 这种方式需要使用GIt中 https://github.com/WuPeiqi/xxxx.git 格式地址。
                 指定用户名和密码: https://用户名:密码@github.com/wupeiqi/xxx.git 

  • 相关阅读:
    [LeetCode] 216. 组合总和 III
    [LeetCode] 215. 数组中的第K个最大元素
    [LeetCode] 215. 数组中的第K个最大元素
    [LeetCode] 215. 数组中的第K个最大元素
    [LeetCode] 213. 打家劫舍 II
    [LeetCode] 212. 单词搜索 II
    [LeetCode] 211. 添加与搜索单词
    转:十大编程算法助程序员走上高手之路
    推荐用于格式化以及高亮显示SQL文的PHP类-SqlFormatter
    转:实用 .htaccess 用法大全
  • 原文地址:https://www.cnblogs.com/lamb2018/p/10929330.html
Copyright © 2020-2023  润新知