爆玩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 

原文地址:https://www.cnblogs.com/lamb2018/p/10929330.html