请注意我有意跳过了 git commit、git pull/push 之类的基本命令,这份小抄的主题是 git 的一些「高级」用法。

导航 -- 跳到之前的分支
  1. git checkout -
查看历史
  1. # 每个提交在一行内显示
  2. git log --oneline
  3. # 在所有提交日志中搜索包含「homepage」的提交
  4. git log --all --grep='homepage'
  5. # 获取某人的提交日志
  6. git log --author="Maxence"
哎呀:之前重置了一个不想保留的提交,但是现在又想要回滚?
  1. # 获取所有操作历史
  2. git reflog
  3. # 重置到相应提交
  4. git reset HEAD@{4}
  5. # ……或者……
  6. git reset --hard <提交的哈希值>
哎哟:我把本地仓库搞得一团糟,应该怎么清理?
  1. git fetch origin
  2. git checkout master
  3. git reset --hard origin/master
查看我的分支和 master 的不同
  1. git diff master..my-branch
定制提交
  1. # 编辑上次提交
  2. git commit --amend -m "更好的提交日志"
  3. # 在上次提交中附加一些内容,保持提交日志不变git add . && git commit --amend --no-edit
  4. # 空提交 —— 可以用来重新触发 CI 构建
  5. git commit --allow-empty -m "chore: re-trigger build"
squash 提交

比方说我想要 rebase 最近 3 个提交:

  • git rebase -i HEAD~3
  • 保留第一行的 pick,剩余提交替换为 squash 或 s
  • 清理提交日志并保存(vi 编辑器中键入 :wq 即可保存)
  1. pick 64d26a1 feat: add index.js
  2. s 45f0259 fix: update index.js
  3. s 8b15b0a fix: typo in index.js
修正

比方说想在提交 fed14a4c 加上一些内容。

git 提交分支
  1. git add .
  2. git commit --fixup HEAD~1
  3. # 或者也可以用提交的哈希值(fed14a4c)替换 HEAD~1
  4. git rebase -i HEAD~3 --autosquash
  5. # 保存并退出文件(VI 中输入 `:wq`)
rebase 的时候在每个提交上执行命令

如果特性很多,一个分支里可能有多个提交。如果测试失败了,你希望能找到导致测试失败的提交。这时候你可以使用 rebase --exec 命令在每个提交上执行命令。

  1. # 在最近 3 个提交上运行 `npm test` 命令
  2. git rebase HEAD~3 --exec "npm test"

暂存

暂存不止是 git stash 和 git stash pop ;

  1. # 保存所有正在追踪的文件
  2. git stash save "日志信息"
  3. # 列出所有的暂存项
  4. git stash list
  5. # 获取并删除暂存项
  6. git stash apply stash@{1}
  7. git stash drop stash@{1}
  8. # ……或使用一条命令……
  9. git stash pop stash@{1}
清理
  1. # 移除远程仓库上不存在的分支
  2. git fetch -p
  3. # 移除所有包含 `greenkeeper` 的分支
  4. git fetch -p && git branch --remote | fgrep greenkeeper | sed 's/^.\{9\}//' | xargs git push origin --delete
GitHub = Git + Hub

我把 Hub 当成 git 的一个封装来用。你如果也想这么做,可以设置一个别名:alias git='hub'

  1. # 打开浏览器访问仓库 url(仅限 GitHub 仓库)git browse
额外福利:我最喜爱的 git 别名
  1. alias g='git'
  2. alias glog='git log --oneline --decorate --graph'
  3. alias gst='git status'
  4. alias gp='git push'
  5. alias ga='git add'alias gc='git commit -v'
  6. #
  7. Git 高级用法,你会了吗?的更多相关文章

      1. Git 高级用法,喜欢就拿去用
      1. 如果你觉得 git 很迷惑人,那么这份小抄正是为你准备的! 请注意我有意跳过了 git commit.git pull/push 之类的基本命令,这份小抄的主题是 git 的一些「高级」用法. 导航 ...

      1. git高级用法
      1. 1.git未保存的代码怎么切换分支? 2.两个分支的代码怎么合并?怎么解决冲突? 常见报错: 1.Merge failed : Some unreacked working tree files wo ...

      1. git高级用法之cheery-pick
      1. 前言 想象一种情况,你在分支上开发多个功能,现在要将第一个功能推到另一个分支上 master 1_2 | dev \__3_4_5 例如上面的,先基于master创建了分支dev, 然后提交了3co ...

      1. Git log高级用法
      1. 格式化Log输出 首先,这篇文章会展示几种git log格式化输出的例子.大多数例子只是通过标记向git log请求或多或少的信息. 如果你不喜欢默认的git log格式,你可以用git config ...

      1. git log 高级用法
      1. 转自:https://github.com/geeeeeeeeek/git-recipes/wiki/5.3-Git-log%E9%AB%98%E7%BA%A7%E7%94%A8%E6%B3%95 内 ...

      1. 问题: 查看某个文件的修改记录| git log 高级用法
      1. 参考文章: git查看某个文件的修改历史 5.3 Git log 高级用法 基本步骤 git log --pretty=oneline [文件名] git show [节点] git log 两周高级 ...

      1. Python彩蛋、字典、列表高级用法、元类、混入、迭代器、生成器、生成式、git
      1. 一.类与类的关系 关注公众号"轻松学编程"了解更多. is-a 继承 继承是指一个类(称为子类.子接口)继承另外一个类(称为父类.父接口)的功能, 并可以增加它自己的新功能的能力. ...

      1. Git版本控制:Git高级教程
      1. http://blog.csdn.net/pipisorry/article/details/50669350 Git有很多命令行参数,使用起来非常方便.可以运行 man git log ,来看一下这 ...

      1. Jenkins高级用法 - Jenkinsfile 介绍及实战经验
      1. 系列目录 1.Jenkins 安装 2.Jenkins 集群 3.Jenkins 持续集成 - ASP.NET Core 持续集成(Docker&自由风格&Jenkinsfile) 4 ...

    1. 随机推荐

        1. Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
        1. Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183) 漏洞说明 // 基于Nginx的https网站被扫描出SSL/TLS协议信息泄露漏洞(CVE-2016-2183),该漏 ...

        1. ckeditor4.0以上使用行间距插件lineheight报错修改
        1. ①从百度上下载一个 ckeditor 行距包,解压放到ckeditor/plugins目录下. ②在config.js 中添加 config.extraPlugins += (config.extra ...

        1. C/C++ 实现PE文件特征码识别
        1. PE文件就是我们常说的EXE可执行文件,针对文件特征的识别可以清晰的知道该程序是使用何种编程语言实现的,前提是要有特征库,PE特征识别有多种形式,第一种是静态识别,此方法就是只针对磁盘中文件的特征码字 ...

        1. json模块:json.dumps()、json.loads()、json.dump()、json.load()
        1. json.dumps().json.loads().json.dump().json.load() 4个方法的总结和使用: 注意:存在文件里面的东西,读出来都是字符串 import json 1.js ...

        1. Java多线程--CAS
        1. Java多线程并发的情况下同时对一个变量进行操作会出现线程安全的问题,假如我们现在使用20个线程对一个变量不停累加1,代码如下: 1 public class ThreadDemo implemen ...

        1. Hive 窗口函数sum() over()求当前行和前面n条数据的和
        1. 前几天遇到一个这样的需求:销售总占比加起来超过75%的top分类.具体需求是这样的:商品一级分类标签下面有许多商品标签,例如运动户外一级标签,下面可能存在361°,CBA,Nike,Adidas... ...

        1. win10彻底卸载和删除MySql
        1. 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_41140741/article/de ...

        1. 大白话谈JVM的类加载机制
        1. 前言 我们很多小伙伴平时都是做JAVA开发的,那么作为一名合格的工程师,你是否有仔细的思考过JVM的运行原理呢. 如果懂得了JVM的运行原理和内存模型,像是一些JVM调优.垃圾回收机制等等的问题我们才 ...

        1. OpenCV图像处理学习笔记-Day1
        1. OpenCV图像处理学习笔记-Day1 目录 OpenCV图像处理学习笔记-Day1 1课:图像读入.显示和保存 1. 读入图像 2. 显示图像 3. 保存图像 2课:图像处理入门基础 1. 基本 ...

        1. mysql-15-view
        1. #视图 /* 含义:虚拟表,和普通表一样使用.通过表动态生成的数据 只保存了sql逻辑,不保存查询结果 应用场景: 1.多个地方用到同样的查询结果 2.该查询结果使用的sql语句较为复杂 */ USE ...