Explosion play GIT

Understanding GIT

git is an open source distributed (remote client and stores all versions, and centralized remote only be available in all record) version control software, efficient version management.

git is mainly generated in the local project directory .git folder, record and store a variety of modified versions, if you want to share or remote collaborative development, you need to use remote code hosting platform (such as Ali cloud, github, gitlab, etc.)

 GIT operation (local)

git init to create a .git folder

git git status to view the current status (red for have been modified or added to the repository, green represents the repository BSR)

git add "filename" Add all files in the current directory to the repository

git commit -m "description of this submission," added the current version described and submitted to the staging area file repository branch

  • git config --local user.name 'lamb submitting user
  • git config --local user.email '[email protected]' user submitted email address

git log record version history

After the rollback git log git reflog so bad, we need to git reflog view the history of all versions  

Fix a bug in two ways:

Scheme 1 stash

git stash under development and not the complete contents of the temporary storage somewhere

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)
    • 注:[email protected]: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 

Guess you like

Origin www.cnblogs.com/lamb2018/p/10929330.html