目录

  • git指南
    • git常用命令
    • 配置局部用户
    • git credential helper 免密配置
    • 代码提交规范
    • push到远程仓库
  • 根据git log修改和抢救
    • git reset: 恢复到之前的commit(本地代码均未Push)
    • git rebase的各种作用
    • pull解决冲突
    • 修改某一次commit的内容
    • 强制push到远程分支【高危操作】

git指南

git常用命令

//do some modification
git diff
git checkout -f //This is used to throw away local changes//do some modification
git status
git add .  //添加changes
git status //可以看到changes to committedgit commit -a -s -m "some info messages about changes"
git show  //可以看到commit及用户签名
git log   //可以看到他人的commitgit remote -v //origin
git branch    //查看分支,例如,在master分支下
git push origin <本地分支>:<远程分支>----
本地分支重命名
git branch -m old new(不是当前分支)
git branch -m new(是当前分支)

配置局部用户

在代码库git下生成局部用户的git config文件,commit时有user信息。注意不要跟别人用同一个user name来提交(全局用户)。

cd /src/github.com/repo
git config user.name "user"
git config user.email "user@email.com"
cat .git/config

git credential helper 免密配置

起因:每次编译需要从gitlab上拉包都要输入用户密码,很麻烦,用git credential可以保存用户密码

//删除 manager配置
git config --global --unset credential.helper manager/store
//添加manager配置
git config --global  credential.helper manager/store

代码提交规范

  • 格式type: description

    • 其中type是commit的类别,包括

      • fix - 修复bug
      • add - 新功能
      • update - 更新
      • style - 代码格式改变
      • test - 增加测试代码
      • revert - 撤销上一次commit
      • build - 构建工具改动
    • description是对本次提交的简短描述。
      • 不超过50个字符
      • 每行不能超过72个字符
      • 推荐以动词开头
  • 每个功能的实现作为一个commit
    • 例如,单元测试的每一个测试函数都是一个功能,为了便于review,可以每写一个函数就一个commit,防止代码量太大,增加review负担。
  • 每次commit的代码行数不要超过300行!10 lines - 10 bugs, 500 lines - looks fine!

push到远程仓库

  • 如果在本地的master分支修改,然后在远程仓库:git remote有一个origin,那push到远程仓库的时候,可以不push到master分支,而是push到远程仓库的新建分支。可以把本地的master分支,推到远程的mybranch分支。
git push origin master(本地分支):mybranch(远程分支)
  • 一般情况下最好是本地分支和远程分支重名,所以一开始pull的时候就checkout到一个新特性分支。通常情况下,一个分支对应一个新的特性。

  • 先rebase再push

    git pull --rebase origin master (把当前分支上所有的commit换成基于最新master分支的commit)
    git push origin 本地分支:远程分支
    

根据git log修改和抢救

git reset: 恢复到之前的commit(本地代码均未Push)

  • 状态恢复到之前的commit,但是现有的修改保留

    $git log
    ----
    commit aaaaa (newest)
    commit bbbbb
    commit ccccc$git reset ccccc$git log
    ---
    commit ccccc
    (然后git status可以看到aaaa和bbbbb的修改,unstaged)
    
  • 完全撤销,丢弃某一次commit之后的代码,恢复现场

    $git reset --hard ccccc
    

git rebase的各种作用

http://jartto.wang/2018/12/11/git-rebase/

  • case1:多次无用commit可以合并到一条commit。

    https://juejin.im/entry/5ae9706d51882567327809d0

    • 对于一个小功能,多次无用commit不利于代码review,且会造成分支污染,不利于回滚。
git rebase -i HEAD~4 //合并最近四次提交记录 ---进入vim编辑模式,有相关命令
//pick+s+s+s,确定好每条commit如何处理后,:wq推出,会自动进入commit message编辑的界面
//编辑commit messagegit log //查看结果
  • case2:分支合并

    • 如果两个人在masterd的不同子分支上开发,然后最终要合并,直接merge会污染commit记录。可以先rebase再merge。
  • case3:在一个过时的分支上进行开发,先rebase比较好。
  • case4:修改某一次commit的内容

但是git rebase是一个危险命令,因为改变了历史,要谨慎使用。

只要分支上需要rebase的所有commits历史都没有被push过,就可以安全使用rebase。

pull解决冲突

  • push前,可以先pull,注意pull和pull --rebase的区别
git pull --rebase origin master //把在当前分支上的所有修改rebase到orgin:master分支。
  • 冲突解决

    • 在IDE中可以直接选择,也可以手动修改。
    • head====上半部是我的commit,下半部是pull到的修改。酌情选择。可以直接accept incoming change。
    • 解决完了,要git add一下。再git rebase --continue。

修改某一次commit的内容

  • 起因:用VScode导致有很多trailing space,别人无法用Patch来合并。要删除某一个commit中的这些无用空格。
  • 修复:
    • (git stash)
    • git rebase -i(–interactive) [需要修改的commit的前一条的commit号]
    • 对于需要修改的commit,把pick改成 edit
    • 修改文件
    • git add
    • git commit --amend
    • git rebase --continue
    • (git stash pop)

强制push到远程分支【高危操作】

  • 起因:之前没有rebase,直接push到了B分支。希望rebase后再push到B分支上(覆盖)。(远程仓库的分支只可以更新,不可以覆盖,除非force push)

    local:
    git pull --rebase origin master
    //xxxx冲突,解决冲突....
    git add xxxx
    git rebase --continue
    //ok
    git push [-f] origin 本地分支:远程分支
    

【git】git实操笔记相关推荐

  1. 记一次 Git GitHub 实操

    记一次 Git & GitHub 实操 1.前言 之前写了一个名为 typora-tools 的小工具,主要实现了图片瘦身.标题编号.图片同步的功能,现在想将此项目上传至 GitHub 中,并 ...

  2. 浪潮式发售实操笔记(中国版)

    浪潮式发售实操笔记(中国版) 覃小龙 中国互联网权威营销专家 沃克其人 产品发售公式的发明人叫杰夫·沃克,一个精彩的吊丝逆袭人生,他堪称互联网赚钱速度最快的人,目前是亚马逊创始人贝佐斯的创业教练. 杰 ...

  3. 实操笔记——笔记本加内存及清灰

    实操笔记--笔记本加内存及清灰 写在前面 一.加内存 1 如何确定能否增加 1)当前电脑内存 2)系统是否支持 3)当前电脑支持的最大内存 4)内存条插槽数 2 如何选择内存条 首选确定当前内存条是几 ...

  4. 基于创龙TMS320C665x平台GigE工业相机图像采集案例实操笔记

    基于创龙TMS320C665x平台GigE工业相机图像采集案例实操笔记 开发平台:创龙TL665x-EasyEVM: 基于TI KeyStone C66x多核定点/浮点DSP TMS320C665x, ...

  5. 小白也能看懂的git入门实操[狂神聊git学习笔记]

    写在前面:本文为狂神聊git视频的学习笔记,仅供个人学习使用,如有侵权,请联系删除. 视频链接:https://www.bilibili.com/video/BV1FE411P7B3 文档参考:htt ...

  6. supervisor 守护多个进程_supervisor守护进程管理实操笔记

    2020年年后工作中需开发一支持多数据源自动上报业务数据的程序,程序开发完部署上线时需要对其进程进行自动管理,不然哪天程序down了还不知,可就麻烦了,所以这里选用了强大的supervisor,以下文 ...

  7. 计算机系统要素-Project1实操笔记

    目录 1 软件安装(环境搭建) 2 Project 1实操记录 2.1 Project 1目标: 2.2 实现方法一:用两个[Nand]实现一个[And] 2.3 实现方法二:先实现一个[非门],再用 ...

  8. php编程入门指南快学快用,会计:快学快用实操笔记

    本书从企业的主要经济业务入手,本着为实际工作服务的宗旨,为读者介绍了会计基础知识和基本核算方法,并从企业管理的角度讲解了财产清查和税务方面的知识.书中主要内容包括重新认识会计.建立账户.会计凭证.登记 ...

  9. 郝健: github多人协作项目开发实操笔记

    作者简介: 郝健(Artist),目前就职于赛尔网络CERNET技术开发部,研发项目经理:以前在天融信Topsec软件平台部做防火墙核心系统开发. 本文简介: 这是网友Artist在看完王玉成老师的g ...

最新文章

  1. python语言入门书籍推荐-入门python有什么好的书籍推荐?
  2. Ubuntu17.04安装WineQQ7.8及微信
  3. Radar Installation
  4. Hive分析窗口函数(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
  5. iOS强制切换横屏、竖屏
  6. oracle+内存错误,oracle使用内存的错误,ORA-27102: out of memory
  7. Java—Map集合详解(HashMap/Hashtable/LinkedHashMap/Properties/TreeMap/WeakHashMap/IdentityHashMap/EnumMap)
  8. Struts2中EL表达式的取值范围问题
  9. 创龙DSP6748开发板驱动LCD屏
  10. Ubuntu13.04配置优化(四)转贴
  11. R语言--字符串操作
  12. 在无锡调试的工作,到了泰安出错了
  13. linq to sql 语法 学习笔记(1)
  14. python二维数据读取对齐_[Python ] Python 多维数组转换的维度对齐问题
  15. MSI设计一个1位二进制全减器
  16. 南阳理工计算机与信息工程学院,南阳理工学院计算机与信息工程学院
  17. 为什么计算机打不开优盘,U盘打不开,且8G的U盘只报64M,为什么?
  18. 姓名: 张轩瑞(小名happy) 性别: 男 年龄:3周岁 走失时间: 2018年7月1日下午4:30 家属电话:18735352768
  19. 线性代数中自由变量为什么取0和1?
  20. 史上首次!个人所得税退税来了!如何退?怎么操作?

热门文章

  1. java生成随机用户名(工具类)
  2. win10查看USB设备接入记录
  3. “真正的”Apk增量更新方案ApkDiffPatch
  4. HFSS初探日志(四):毫米波相控阵喇叭馈源天线设计
  5. 轨迹发生器 matlab,GPS和INS组合导航程序,其中包括轨迹发生器、KALMAN滤波、模型建立、伪距伪距率组合方式进行仿真...
  6. 十二月英语总结--充满热情
  7. 基于python的接口录制平台的设计与开发
  8. slf4j绑定log4j使用
  9. 计算机辅助设计与制造的应用,计算机辅助设计与制造(UG)
  10. 误GHOST、误一键恢复灾难应急方案