• 原文地址:My Personal Git Tricks Cheatsheet
  • 原文作者:Antonin Januska
  • 译文出自:掘金翻译计划
  • 本文永久链接:https://github.com/xitu/gold-miner/blob/master/TODO1/my-personal-git-tricks-cheatsheet.md
  • 译者:Pingren
  • 校对者:zh1an,Badd,shixi-li

我个人的 Git 技巧备忘录

除了 “基础的” 命令之外,每个人都有他们常用的 Git 技巧。我想列出我愿意在 .gitconfig 保存别名(alias)的命令。在文章末尾,你可以看到一些在 git 之外与 git 相关的有意思的命令!:)

快速纠正

我经常忘记提交(commit)某文件,或者遗留了 console.log 在文件里。我十分讨厌如 删除 console.log 的提交。因此,我将添加文件至暂存区,就好像我要提交一样,接着运行命令:

git commit --amend --reuse-message HEAD

这个命令会将文件加入上次提交,并且重新使用旧的提交信息。我将它的别名设置为 git amend,用于快速修正错误。

注意 基于底下评论区的回复,也可以使用命令 git commit --amend --no-edit 达到一样的效果。

在 origin/master 分支的顶部变基

旧的分支通常情况下会落后相当久远,久到我不得不准备好消除编译错误、ci 错误,或者解决冲突。此时我最喜欢使用以下命令:

git fetch origin # fetch latest origin
git rebase origin/master

通过这种方式,我将当前分支的提交都叠加在最新版本的 master 分支之上。

上次的提交

有时,git log 命令的结果冗长。由于我频繁使用的前文中提过的 amend 命令,我倾向于查看最后一条提交记录:

git log -1

签出到旧版文件 (比如一个锁文件!)

有时,我把某个与我的分支不相关文件搞坏了。这通常发生在锁文件上(mix.lockpackage-lock.json 等等)。我只是将这个文件“重置”回旧版本而不是还原一个可能包含许多其他内容的提交:

git checkout hash值 mix.lock

接着我就可以提交修复!

cherry-pick

我偶尔会使用这个被低估的命令。当一个分支变得老旧,有时候从中只获取真正需要的东西,比让整个分支跟上进度简单。举个例子,这个分支有关于 UI 或后端的冗余代码。在这种情况下,我可能只想从分支中挑选出特定的提交:

git cherry-pick hash值

这将会把提交带到你所处的分支。你也可以使用列表!

git cherry-pick 第一个hash值 第二个hash值 第三个hash值

你也可以使用区间:

git cherry-pick 开始的hash值..结束的hash值

参考日志

这是一个高级功能,以至于我几乎不用它。我的意思是,大概一年用一次。但是了解一下它还是挺好的。有时,我丢失了提交:我不小心删除了分支、重置或修改了一个提交。

在这些情况下,知道 reflog 的存在就挺好的。它不是你当前所处的分支的提交日志,它是你所有提交(包括了在失效分支之上)的日志。然而,这个日志将会随着时间推移被清空(pruned),因此只有有关的信息会保留。

git reflog

这个命令将返回一个日志,你可以在某个提交之上使用挑选或者变基。使用 pipe 管道命令连接 grep 之后非常强大。

Bash 命令别名

除了 git 命令,我也喜欢使用一些有趣的 bash 别名来帮助我的工作流。

当前分支

为了获取当前分支的名字,我有这个别名:

alias git-branch="git branch | sed -n -e 's/^* (.*)/1/p'"

当我运行 git-branch 或者在其它命令中运行 $(git-branch),我将得到我目前所在的分支的名字。

注意 基于评论区的回复,我将它切换为 git symbolic-ref --short HEAD,可以达到一样的效果并且命令更具有可读性。

跟踪上游分支

虽然我确定配置 .gitconfig 可以解决问题,我暂时还没弄清楚如何做(译者注:使用命令 git config --global push.default current,参见官方文档)。当我在新的分支上首次运行推送命令时,我总是被要求先设置上游分支的跟踪状态。这种情况下我使用别名:

alias git-up="git branch | sed -n -e 's/^* (.*)/1/p' | xargs git push -u origin "

现在当我运行 git-up,我可以推送当前的分支并设置好上游分支的跟踪状态!

回复

基于评论中一些有用的反馈,我对我所使用的别名做了一些修改。

当前分支

似乎有许多新方式来获取当前的分支名称。如果你往上看,你将看到我使用了一个疯狂的 sed 命令来获取分支名称。

以下是我使用的新办法:

alias git-branch="git symbolic-ref --short HEAD"

它的运行与期望完全一样!

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。

git 清空log_[译] 我个人的 Git 技巧备忘录相关推荐

  1. git清空工作区和暂存区

    来理一理,其实git对于文件的管理无非就是三个基本的阶段: 创建文件 编辑文件 git add 添加本次需要修改的文件 git commit 提交暂存区的文件更改 如果文件已经存在,那么就只需要执行2 ...

  2. [译] 保护我们的 Git Repos,立刻停止“狐步舞”

    本文讲的是[译] 保护我们的 Git Repos,立刻停止"狐步舞", 原文地址:Protect our Git Repos, Stop Foxtrots Now! 原文作者:Sy ...

  3. git 清空所有commit记录

    说明:例如将代码提交到git仓库,将一些敏感信息提交,所以需要删除提交记录以彻底清除提交信息,以得到一个干净的仓库且代码不变 1.Checkout git checkout --orphan late ...

  4. git 修改tag 备注_【Git】第十二章:Git高级实战技巧

    1.查看不同版本之间的代码差异 短SHA-1值 使用git命令来代表某个commit时,我们不一定就是要用40位完整的SHA-1 hash值,也可以只是提供hash值的前几位就可以了,至少要4位以上, ...

  5. git 设置有效目录_如何有效使用Git

    git 设置有效目录 The code was working yesterday but today it is not 该代码昨天有效,但今天却没有 The code got deleted 代码 ...

  6. 用 Git 和 Github 提高效率的 10 个技巧!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:segmentfault.com/a/11900000038 ...

  7. linux centos7安装git服务器配置,CentOS7 Linux环境下搭建Git仓库

    1.安装依赖库 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel 2.安装Git ...

  8. Git学习系列之Windows上安装Git之后的一些配置(图文详解)

    不多说,直接上干货! 前面博客 Git学习系列之Windows上安装Git详细步骤(图文详解) 第一次使用Git时,需要对Git进行一些配置,以方便使用Git. 不过,这种配置工作只需要进行一次便可, ...

  9. Git 2.18版本发布:支持Git协议v2,提升性能

    2019独角兽企业重金招聘Python工程师标准>>> Git 2.18版本发布:支持Git协议v2,提升性能Git 2.18版本发布:支持Git协议v2,提升性能 新版本协议的主要 ...

最新文章

  1. tiny4412学习之u-boot启动过程
  2. android流量控制的实现,Android系统中P2P应用数据包捕获及流量控制研究
  3. Windows Storage Server 2008做存储服务器应用案例
  4. pve虚拟机导入gho_用vmware安装gho文件心得
  5. mysql批量修改字段字符集_MySQL字符集修改实战教程
  6. java 虚拟机 新生代与老年代gc_java 虚拟机--新生代与老年代GC
  7. Android中设置输入法为数字输入
  8. 华为手机老是显示不到服务器,老显示连接不到服务器
  9. 基于Vue2.0+Vuex+Axios+NodeJs+Express+MySQL实现京东移动web商城
  10. Atitit java解析yml文件 以及使用 spel ognl 读取 v4 u77.docx Atitit java解析yml文件 目录 1.1. Springboot use snak
  11. 怎么理解JS Promise
  12. 做嵌入式编程,为什么用的是C语言而不是C++呢?
  13. 从《天行九歌》到海盗问题
  14. echarts 自定义图表的那些事
  15. 什么是GPU云服务器,有哪些优势?
  16. java销售增加 库存减少_java 进销存 商户管理 系统 管理 库存管理 销售报表springmvc SSM项目...
  17. http proxy 代理
  18. HBuilder如何分栏显示?
  19. 群发邮件平台有哪些?哪个好用?
  20. 彩云碧海蓝天Mac高清动态桌面壁纸

热门文章

  1. 2019 深度学习框架大盘点!看 PyTorch、TensorFlow 如何强势上榜?
  2. mybatis注册了mapper但是还是报错_springboot整合Mybatis
  3. 减小Delphi的Exe文件大小
  4. OpenGL从入门到精通--纹理
  5. 23种设计模式C++源码与UML实现--责任链模式
  6. trap--shell脚本调试的不二人选
  7. 递归函数反向显示单链表
  8. 搭建XSS (跨网站指令码) 测试平台
  9. 数组之删除排序数组中的重复项
  10. 关于多层html标签嵌套引起CSS冲突问题的解决。