zoukankan      html  css  js  c++  java
  • git个人使用总结

    一、基础命令

    快照类操作:add、status、diff、commit、reset、rm、mv

    分支类基本操作:branch、checkout、log、stash

    分享及更新项目基本操作:pull、push

    组合场景操作:

    获取代码:创建仓库(UI)、clone

    提交代码:add、status、diff、commit、reset

    分享代码:branch、push

    更新代码:stash、rebase、pull

    阅读代码:checkout、log

    贡献代码:fork、merge request

    二、以下为具体操作与截图

    1、获取代码

    在git bash命令下执行git clone <git下载地址>,例如:git clone git@git.scm.test.com:zhanyuyi/git_basic_homework.git

    2、 建立.gitgnore

    (1)第一次提交代码前,建立.gitignore,在git bash命令下执行touch .gitignore即可生成

    (2)建立.gitignore后,提交

    //添加.gitignore文件到暂存区

    git add .gitgnore

    //提交

    git commit -m "chore:添加.gitgnore,忽略不需要版本跟踪的文件"

    (3)用文本编辑器如editplus或notepad++输入需要忽略的文件或文件名,一般可忽略的文件有以下:

    ##ignore this file##
    /target/ 

    .classpath
    .project
    .settings      
     ##filter databfile、sln file##
    *.mdb  
    *.ldb  
    *.sln    
    ##class file##
    *.com  
    *.class  
    *.dll  
    *.exe  
    *.o  
    *.so  
    # compression file
    *.7z  
    *.dmg  
    *.gz  
    *.iso  
    *.jar  
    *.rar  
    *.tar  
    *.zip  
    *.via
    *.tmp
    *.err 
    # OS generated files #  
    .DS_Store  
    .DS_Store?  
    ._*  
    .Spotlight-V100  
    .Trashes  
    Icon?  
    ehthumbs.db  
    Thumbs.db  

    备注:

    /target/ :过滤文件设置,表示过滤这个文件夹

    *.mdb  ,*.ldb  ,*.sln 表示过滤某种类型的文件
    /mtk/do.c ,/mtk/if.h  表示指定过滤某个文件下具体文件
     !*.c , !/dir/subdir/     !开头表示不过滤
     *.[oa]    支持通配符:过滤repo中所有以.o或者.a为扩展名的文件

    该方法保证任何人都提交不了这类文件

    3、提交代码

    本地working directory、staging area暂存区、local repo三个区域间切换关系

    提交代码前需要做好2点,第一,一次提交只做一件事;第二,review后才提交。

    通常为以下步骤:

    //步骤1:查看本地仓库状态
    
    git status
    
    //步骤2:添加认为本次提交应包含的文件到暂存区
    
    git add file1
    
    ...
    
    //步骤3:review暂存区内容
    
    git diff --cached
    
    //若review发现问题,则继续修改,然后再add,直到满意
    
    ...
    
    //步骤4:提交到本地仓库
    
    git commit -m "feat:新增a.java"
    
    //步骤5:提交到远程仓库
    
    git push

    有提交必然有提交日志,提交日志格式:

    <type>(<scope>):<subject>
    
    //空一行
    
    <body>

    提交日志规范如下:

    type
    用于表示commit的类别,允许用下面8个标识
    ftr/(feat):新功能(feature)无ftr历史原因的,请使用feat
    fix:修补bug
    docs:文档(documentation)
    style:格式(不影响代码运行的变动)
    refactor:重构(即不是新增功能,也不是修改bug的代码变动)
    test:增加测试
    chore:构建过程或辅助工具的变动
    conflict:解决冲突
    
    scope
    用来标识当前提交代码的影响范围 如果jira单对应,用(#jira
    -1)的格式来标准(如果jira单对应feat或fix,强制性添加) 如果没jira单对应,则按层级描述代码的影响范围(eg:view,viewmodel,net,test,model,utils,protocol,presenter) 如果在代码评审工具Phabricator评审代码,在scope中加上fix的hash id 如果没合适的范围,可以不填

    subject
    是commit目的的简短描述,不超过50个字符。
    以动词开头
    结尾不加句号(。)或句点(.)

    body
    是对本次commit的详细描述,可以分成多行

    提交范例:

    有jira单例子
    ftr(#JIRA-1):完成计算器加减开发
    
    计算器加减法功能完成
    -添加加减法计算UI
    -添加错误提示样式
    没jira单例子
    refactor(viewmodel):重构add viewmodel部分代码,提高性能
    
    add计算逻辑优化
    -整型改为浮点型计算

     

    4、合并代码

    合并他人分支时,例如需要把task_TEST-1_zhanyuyi合并到master分支

    第一,若不在master分支,使用git checkout master把当前分支切换到master分支;

    第二,使用git merge task_TEST-1_zhanyuyi后,确定merge成功;

    第三,使用git push,把当前的master分支推送到远程master分支;

    5、分享代码(创建分支、推送到远程分支)

    第一,创建专属分支git branch <分支名>,分支命名规则:<任务类型>_<任务序号>_<姓名拼音缩写>,例如:task_JIRA-1_zhanyuyi

    第二,第一次push到远程分支(在远程仓库创建分支并绑定到本地同名分支),git push -u origin <分支名称>

    第三,非首次push到远程分支,git push

    以下为本地常用分支操作

    //查看分支
    git branch
    
    //创建分支
    git branch <分支名>
    
    //切换分支
    git checkout <分支名>
    
    //创建+切换分支
    git checkout -b <新分支名字>
    
    //删除分支
    git branch -d <需删除的分支名>

     6、更新代码

    当你正在专属分支开发时时,临时需要改BUG或切换分支,可用下面的步骤

    //存储所有目前带有版本跟踪的文件,并把文件恢复回和最新提交一致的内容
    git stash
    
    //去做所有想做的事情,例如改BUG,切分支
    
    //搞定想做的事情后,准备继续前面的工作,切回原分支
    git checkout <原工作分支名字>
    
    //把第一步存储的文件全部恢复回来
    git stash pop

    然而无专属分支时,确实需push

    //存储所有目前带有版本跟踪的文件,并把文件恢复回和最新提交一致的内容
    git stash
    
    //获取远程仓库最新代码,并应用到本地
    git pull
    
    //推送远程仓库
    git push
    
    //把第一步存储的文件全部恢复回来
    git stash pop

    在上面步骤看到git pul可以获取远程仓库最新代码并应用到本地,其实git pull效果等价于git fetch+git mergre<本地当前分支名>

    副作用:若pull时,本地有代码没push,会产生一次merge提交。不推荐在没有进行stash的前提下pull,容易冲突。

    副作用解决方法:为了同步公共分支最新内容,用git fetch+git rebase origin/<本地当前分支名称>代替git pull

    例:
    git fetch origin
    
    git rebase origin/<本地当前分支名>

    7、阅读代码

    当你正在一个分支,突然想看看别人分支的代码,可以用以下方法

    //先把正在编辑的分支保存起来
    git stash
    
    //查看当前分支提交日志
    git log
    
    //查看日志,一行一行阅读日志
    git log --online
    
    //切换到指定提交后的状态
    git checkout <单次提交的sha-1>
    
    
    //做你想做的事情
    。。。
    //最后,记得把第一步存储的文件全部恢复回来
     git stash pop

    看到这里,<单次提交的sha-1>相信大家疑问在哪里取,其实,在查看日志每个提交开头,7位,类似b76a6c5,如果切换到前一个提交后,一切正常还想看看前前一个提交如何,就用下面的方式

    //查看上一个提交改了什么
    git log -p <提交的sha-1>

    8、贡献代码

    在网页fork,然后merge request

    三、GIT网页操作

    1、版本对比

     【compare】后,展开两个版本修改内容,绿色代表新增,红色代表删除。展开某个类后,选择右侧的【Side-by-side】做左右对比

    2、用到继续写

    四、git技术栈脑图

    (从简书上搜索的https://www.jianshu.com/p/e73b2bf0f62f

     

  • 相关阅读:
    【Quartz】常用方法的使用方式(三)
    【Quartz】实现接口封装化(二)
    【Quartz】定时器初步实验(一)
    数据库和ado连接语句的使用总结
    PMP 德尔菲技术
    java 事务解释。
    防盗链--解释
    java月利率计算(等额本息贷款)
    java 日志的数据脱敏
    MDC 输出线程信息帮助定位问题
  • 原文地址:https://www.cnblogs.com/yulia/p/7612186.html
Copyright © 2011-2022 走看看