一、刚提交的代码,发现需要微调一下

  刚刚最新提交了一段代码,然后跟前端说,接口好了。过了2分钟,前端跟你说,哎,兄弟,那个金额能不能返回整数,不要小数点。

  这个时候一般我们通常会修改一下之后,再提交一个版本。那么又过了2分钟,前端又跑来说,哎,兄弟,那个日期能不能换个格式...

  正常我们又会修改下后再提交一个版本,那么就一些简单的改动,我们就提交了好几个版本,可以是可以,不过还有一个更加优雅和简单的解决方法: commit --amend

  "amend" 是「修正」的意思。在提交时,如果加上 --amend 参数,Git 不会在当前 commit 上增加 commit,而是会把当前 commit 里的内容和暂存区(stageing area)里的内容合并起来后创建一个新的 commit,用这个新的 commit 把当前 commit 替换掉。所以 commit --amend 做的事就是它的字面意思:对最新一条 commit 进行修正。

  具体地,当你把修改改完之后,直接运行:

git add .
git commit --amend

  之后会出现你之前一个提交的信息:

  你可以修改或保留它,然后保存退出就可以了。你的最新commit就被更新了,如下图所示:

   

二、要修改的不是最新的commit,而是倒数第二个

  突然我先我们倒数第二个提交需要进行一些微小的调整,那么这时候我们就不能用上面那种处理方式了,不过也是有办法的。

   rebase -i :是 rebase --interactive 的缩写,意思为「交互式rebase」。

  

   git log 后我们发现是倒数第二个commit需要修改,那么此时我们可以运行:

   git rebase -i HEAD^^ ,就会跳出如下这个界面。

  

   这个编辑界面的最顶部,列出了将要「被 rebase」的所有 commits,也就是倒数第二个 commit 「modify testgit」和最新的 commit「mofify .gitignore」。需要注意,这个排列是正序的,旧的 commit 会排在上面,新的排在下面。

   此时,我们需要修改哪个commit,就可以把commit 之前的pick修改成edit ,然后就可以退出这个界面。

  上面的界面告诉我们,rebase过程已经停在需要修改的那个commit,然后我们可以进行修改了,修改完后:

git add .
git commit --amend

  上传修改后,就可以运行:

git rebase --continue

  如果没有冲突,那么就完美rebase了。

三、紧急情况:stash存储

  当你正在敲着键盘,埋头开发一个新功能时,突然有人跑过来跟你说,哎,兄弟,你之前开发的那个功能出现了一个bug,赶紧改一下,这时候你新分支功能才刚刚开了一个头,如果直接commit一次肯定是可以的,不过有更好的处理办法-- git stash .

   git stash 后会把你工作目录的改动清空,然后存储到另外一个地方。需要注意的是, git stash 会忽略那些没有被track的文件,这时候需要加上参数-u,即 git stash -u 。

  当你把bug修复后,切回工作分支。然后:  

git stash pop

  你之前存储的东西就回来了,是不是很方便?

git进阶的更多相关文章

  1. Git 进阶指南(git ssh keys / reset / rebase / alias / tag / submodule )

    在掌握了基础的 Git 使用 之后,可能会遇到一些常见的问题.以下是猫哥筛选总结的部分常见问题,分享给各位朋友,掌握了这些问题的中的要点之后,git 进阶也就完成了,它包含以下部分: 如何修改 ori ...

  2. Git 进阶指南

    转自: https://github.com/kaiye/kaiye.github.com/issues/7 在掌握了基础的 Git 使用 之后,可能会遇到一些问题.以下是猫哥筛选总结的部分常见问题, ...

  3. 从0开始学习 GITHUB 系列之「GIT 进阶」【转】

    本文转载自:http://stormzhang.com/github/2016/06/16/learn-github-from-zero5/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...

  4. 从0开始学习 GitHub 系列之「05.Git 进阶」

    关于 Git 相信大家看了之前一系列的文章已经初步会使用了, 但是关于Git还有很多知识与技巧是你不知道的,今天就来给大家介绍下一些 Git 进阶的知识. 1. 用户名和邮箱 我们知道我们进行的每一次 ...

  5. Git进阶:常用命令和问题案例整理

    一.前言 整理常用git命令和以及在实际使用的过程中碰到的问题案例,旨在git进阶,提升工作开发效率,有需要补充的小伙伴欢迎下方留言,本篇持续更新中... 二.命令 配置用户名和邮箱 git conf ...

  6. Git 进阶操作(一)

    1. 获取提交信息(commit) git show 1c002d(哈希值的前几位): 获取提交的信息; git show HEAD^: 显示HEAD的上级(parent)提交的信息; git sho ...

  7. 2.git进阶篇总结

    阅读 Git 原理详解及实用指南 记录 进阶 1 - HEAD.master 与 branch: 介绍了 Git 中的一些「引用」:HEAD.master.branch.这里总结一下: HEAD 是指 ...

  8. 25个 Git 进阶技巧

    [ 原文] http://www.open-open.com/lib/view/open1431331496857.html 我已经使用git差不多18个月了,觉得自己对它应该已经非常了解.然后来自G ...

  9. Git 进阶 —— 远程仓库

    一.远程仓库怎么玩 1. 自己搭建一个运行Git的服务器 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,但肯定有一台机器有着最原始的版本库,然后别的机器来克隆这个原始版本库,这 ...

随机推荐

  1. HTML5 全屏 API

    翻译人员: 铁锚 原文日期: 2013年12月23日 翻译日期: 2013年12月29日 原文链接: Fullscreen API 在越来越真实的web应用程序中,JavaScript也变得越来越给力 ...

  2. UE4 创建自己的角色

    首先,需要在UE4中设置自己需要输入的按键,点击工具栏的Settings/ProjectSettings,找到input,在Bindings下添加自己需要的输入按键,我这里绑定了JumpBtn.Mov ...

  3. Cocos2D中的纹理大小计算

    纹理占用的内存大小是纹理尺寸乘以颜色深度. 图片文件的大小一般很小.一个初学者常见的错误是假设纹理内存使用量和图片大小一致. 哎,纹理内存(对于非压缩格式)的大小可以用以下伪代码来计算: pixelW ...

  4. ExtJS:菜单ComboBox及级联菜单应用

    首页一级菜单查询分组,二级菜单查询分组中的车辆信息. 定义分组数据模型: Ext.define( 'group', { extend:'Ext.data.Model', fields:[ {name: ...

  5. RubyGem默认源安装太慢,修改国内淘宝源

    原帖地址:http://www.hiceon.com/topic/Ruby-Gem-install-source-taobao/ WHY? 由于国内网络原因(你懂的),导致 rubygems.org ...

  6. Android UI之View的加载机制(二)

    转载请标明出处:http://blog.csdn.net/sk719887916/article/details/39961201,作者:skay 对于接触安卓开不到一年的自己来说,总结下view的生 ...

  7. 部署与管理ZooKeepe

    1.部署 本章节主要讲述如何部署ZooKeeper,包括以下三部分的内容: 1. 系统环境 2. 集群模式的配置 3. 单机模式的配置 系统环境和集群模式配置这两节内容大体讲述了如何部署一个能够用于生 ...

  8. springMVC导出word模板

    controller 调用 @RequestMapping(value = "/exportWord") public void exportWord(HttpServletRes ...

  9. List集合中元素排序

    应用场景: 在开发中经常遇到要对List<Object>集合进行排序,并且是根据集合中的对象的某个属性来进行排序    --------以下就此做出的解决方案 public static ...

  10. Web服务cxf框架发布2

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/ ...