【Git 学习笔记_24】Git 使用冷门操作技巧(四)——更多实用 git 别名设置、交互式新增提交

news2025/1/1 22:09:36

文章目录

    • 11.8 更多别名设置
      • 别名1:只查看当前分支(git b)
      • 别名2:以图表形式显示自定义格式的 git 日志(git graph)
      • 别名3:查看由于合并分支导致的冲突后仍有冲突的、待合并的文件列表(git unmerged)
      • 别名4:查看 git 状态(git st)
      • 别名5:查看 git 简要状态(git s)
      • 别名6:查看最新版本的统计信息(git l1)
      • 别名7:查看最近 5 个版本的提交详情(git l5)
      • 别名8:显示带统计信息的提交列表,并对文件变更信息彩色显示(git ll)
      • 别名9:查看上游跟踪分支(git upstream)
      • 别名10:根据 ID/SHA-1 信息查看版本对象信息详情(git details)
      • 别名11:查看当前路径返回仓库根目录需要的上翻次数(git root)
      • 别名12:查看当前仓库根目录的文件绝对路径(git path)
      • 别名13:舍弃变更内容(git abandon)
    • 11.9 交互式新增提交

本节所在位置:

  • 活用 git stash(一)
  • 保存并应用 stash(一)
  • 用 git bisect 进行调试(二)
  • 使用 git blame 命令(二)
  • 设置彩色命令行界面(三)
  • 自动补全(三)
  • 让 Bash 自带状态信息(三)
  • 更多别名设置(四) ✔️
  • 交互式新增提交(四) ✔️
  • 忽略文件
  • 展示与清理忽略文件

11.8 更多别名设置

早在第二章就介绍过一些常见别名,本节将作进一步扩展,介绍更多实用的别名(共 13 个),以提高日常工作效率。还是以本章示例 git 库为例:

# repo init
$ git clone https://github.com/PacktPublishing/Git-Version-Control-Cookbook-Second-Edition_tips_and_tricks.git moreAlias
$ cd .\moreAlias
$ git checkout aliases

分别尝试如下别名:

别名1:只查看当前分支(git b)

# Demo1: show the current branch only as 'git b'
$ git config alias.b "rev-parse --abbrev-ref HEAD"
aliases

别名2:以图表形式显示自定义格式的 git 日志(git graph)

# Demo2: prettier git log as 'git graph'
$ git config alias.graph "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
$ git graph origin/conflict aliases
# ... (omitted)

实测效果:
git graph

别名3:查看由于合并分支导致的冲突后仍有冲突的、待合并的文件列表(git unmerged)

# Demo3: git unmerged
$ git config alias.unmerged '!git ls-files --unmerged | cut -f2 | sort -u'
# test by merging the origin/conflict branch
$ git merge origin/conflict
fatal: refusing to merge unrelated histories
$ git merge origin/conflict --allow-unrelated-histories
CONFLICT (add/add): Merge conflict in spaceship.txt
Auto-merging spaceship.txt
Automatic merge failed; fix conflicts and then commit the result.
$ git unmerged
spaceship.txt
# about merge
$ git merge --abort

实测效果:

git unmerged

别名4:查看 git 状态(git st)

# Demo4: shorten git status as 'git st'
$ git config alias.st "status"
$ git st
On branch aliases
Your branch is up to date with 'origin/aliases'.

nothing to commit, working tree clean

别名5:查看 git 简要状态(git s)

# Demo5: shorter status with branch and file information as 'git s'
$ git config alias.s 'status -sb'
# test
$ touch test
$ echo testing >> foo
$ git s
## aliases...origin/aliases
 M foo
?? test

实测效果:

git s - with status & branch info

别名6:查看最新版本的统计信息(git l1)

# Demo6: show the latest commit with some stats as 'git l1'
$ config alias.l1 "log -1 --shortstat"
$ git l1
commit 75e6d446289ac917aeb18f0f611bd0c91f4b7033 (HEAD -> aliases, origin/aliases)
Author: John Doe <john.doe@example.com>
Date:   Tue Jun 12 22:07:08 2018 +0200

    Better spaceship design

 1 file changed, 9 insertions(+), 9 deletions(-)

实测结果:
git l1

别名7:查看最近 5 个版本的提交详情(git l5)

# Demo7: list latest 5 commits with more info as 'git l5'
$ git config alias.l5 "log -5 --decorate --shortstat"
$ git l5

实测结果:

git l5

别名8:显示带统计信息的提交列表,并对文件变更信息彩色显示(git ll)

# Demo8: Show commit listing with statistics on the changed files in color, as 'git ll'
$ git config alias.ll "log --pretty=format:'%C(yellow)%h%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset %Cred%d%Creset' --numstat"
$ git ll -5

实测发现,定义别名时外层必须使用双引号,否则定义不成功(书中为单引号)。效果如下:
:git ll

别名9:查看上游跟踪分支(git upstream)

# Demo9: show the upstream/tracking branch by 'git upstream'
$ git config alias.upstream "rev-parse --symbolic-full-name --abbrev-ref=strict HEAD@{u}"
$ git upstream
origin/aliases 

别名10:根据 ID/SHA-1 信息查看版本对象信息详情(git details)

# Demo10: show the details of ID/SHA-1 (commit, tag, tree, blob) as 'git details'
$ git config alias.details "cat-file -p"
$ git details HEAD

实测结果:

git details

别名11:查看当前路径返回仓库根目录需要的上翻次数(git root)

接下来这个别名在命令行脚本中非常实用 git root

# Demo11: show the number of cd-ups or '../'s, needed to go to the repository root
# as 'git root'
$ git config alias.root "rev-parse --show-cdup"
$ cd sub/directory/example
$ pwd
$ git root
$ cd $(git root)
$ pwd

实测效果:
git root

别名12:查看当前仓库根目录的文件绝对路径(git path)

# Demo12: View the path of the repository on the filesystem as 'git path'
$ git config alias.path "rev-parse --show-toplevel"
$ git path
C:/Users/z/Desktop/moreAlias

别名13:舍弃变更内容(git abandon)

最后,若想舍弃暂存区(索引区)、工作区、抑或是某 commit 的改动;再或者,在保留版本管理以外的变更的情况下,将工作区重置(reset)到某个状态(或 commit ID),只需要跟一个 ref 引用即可,比如 HEAD:(线上版)

# Demo13: abandon changes as 'git abandon'
$ git config alias.abandon "reset --hard"
$ echo "new stuff" >> foo
$ git add foo
$ echo "other stuff" >> bar
$ git s
## aliases...origin/aliases
 M bar
M  foo
?? test
$ git abandon HEAD
$ git s
## aliases...origin/aliases
?? test

实测效果:

git abandon

11.9 交互式新增提交

如果需要从一个文件中分出多次修改分别提交,如拆分为 bug 修复、代码重构、特性开发等 commit,就可以用到本节演示的交互式提交功能:

# repo init
$ git clone https://github.com/PacktPublishing/Git-Version-Control-Cookbook-Second-Edition_tips_and_tricks.git interAdd
$ cd interAdd
$ git checkout interactive
$ git reset 'HEAD^'
# add interactively
$ git add -p liberty.txt

最后一行的 -p--patch 表示可以成片地、选择性地添加代码变更。此外还可以使用 -i 表示交互模式。

结果如下:

在这里插入图片描述

输入 ? 可查看各操作符含义:

输入?后的提示情况

根据提示,Git 切分出的一块代码变更叫做一个 hunk,键入 y 表示整个加入暂存区,也可以用 s 进行细分;最后可以键入 a 将后面的所有 hunk 都加到暂存区。

该功能类似 SourceTree 的按需提交或撤回某行,只是 SourceTree 的操作界面更友好。如果没有 SourceTree,纯命令行也可以实现该功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2113022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

node快速复制文件或文件夹,排除部分文件(node_modules)

const fs require(fs) const path require(path)/*** description: 获取完整的文件路径* param {*} url 路径* return {*} 返回完整的文件路径*/ const getPath (url) > {return path.join(__dirname, url) }/*** description: 获取参数* return {*} target【目标文件夹】…

Redis应用之Feed流关注推送

我的博客大纲 我的后端学习大纲 -------------------------------------------------------------------------------------------------------------------------------------------------# 3.好友关注&#xff1a; 3.1.关注和取关&#xff1a; a.接口说明&#xff1a; b.编…

算法【Java】 —— 前缀和

模板引入 一维前缀和 https://www.nowcoder.com/share/jump/9257752291725692504394 解法一&#xff1a;暴力枚举 在每次提供 l 与 r 的时候&#xff0c;都从 l 开始遍历数组&#xff0c;直到遇到 r 停止&#xff0c;这个方法的时间复杂度为 O(N * q) 解法二&#xff1a;前…

不会Excel怎么制作桑基图?用什么软件绘制比较好呢?推荐2款简单好用的图表制作工具

桑基图制作很简单&#xff0c;不需要任何基础一次就会&#xff01; 2个桑基图制作工具&#xff0c;帮你一键解决问题~ 1、Dycharts 推荐指数&#xff1a;☆☆☆☆☆ 点击链接直达>>dycharts.com Dycharts是国内一款专业的在线图表制作工具&#xff0c;0代码、无门槛&…

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(2) &#xff08;*****生成数据结构类的方式特别有趣****&a…

AI基础 L5 Uninformed Search II 无信息搜索

How good is search? • Completeness: Does it always find a solution if one exists? 是否通解 • Optimality: Is the solution optimal (i.e., lowest cost)? 是否最优 • Time Complexity: How long does it take to find a solution? 时间多久 • Space Complexit…

程序员都在使用的画图工具

大家好&#xff0c;我是袁庭新。 程序员都在使用的画图工具&#xff0c;你一定没用过这款画图工具吧&#xff01;我教程中的架构图都是用它来画的。 比如我编写的RDB工作原理图就是用draw.io绘制的&#xff0c;如下图所示&#xff1a; 再例如Redis集群故障恢复原理图我也是通…

【论文阅读】DETRs Beat YOLOs on Real-time Object Detection

文章目录 摘要一、介绍二、相关工作2.1 实时目标检测器2.2 端到端目标检测器 三、检测器的端到端速度3.1 分析 NMS3.2 端到端速度基准 四、实时 DETR4.1 模型概述4.2 高效混合编码器4.3不确定性最小的查询选择4.4 缩放的RT - DETR 五、实验5.1 与SOTA对比5.2 混合编码器的消融研…

VMware Fusion Pro 13 for Mac虚拟机软件

Mac分享吧 文章目录 效果一、下载软件二、开始安装安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件 地址&#xff1a;www.macfxb.cn 二、开始安装 安装完成&#xff01;&#xff01;&#xff01;

F12抓包06-4:导出metersphere脚本

metersphere是一站式的开源持续测试平台&#xff0c;我们可以将浏览器请求导出为HAR文件&#xff0c;导入到metersphere&#xff0c;生成接口测试。 metersphere有2种导入入口&#xff08;方式&#xff09;&#xff0c;导入结果不同&#xff1a; 1.导入到“接口定义”&#xf…

ctfshow-web入门-sql注入(web237-web240)insert 注入

目录 1、web237 2、web238 3、web239 4、web240 1、web237 查询语句&#xff1a; //插入数据$sql "insert into ctfshow_user(username,pass) value({$username},{$password});"; 我们需要闭合单引号和括号 添加&#xff0c;查数据库名&#xff0c;payload&…

想要从OPPO手机恢复数据?免费OPPO照片视频恢复软件

此实用程序可帮助那些寻找以下内容的用户&#xff1a; 在OPPO手机中格式化存储卡后可以恢复图片吗&#xff1f;我删除了 OPPO上的视频和图片&#xff0c;我感觉很糟糕&#xff0c;因为里面有我在拉斯维加斯拍摄的视频和照片 免费OPPO照片视频恢复软件 您能恢复OPPO上已删除的…

解锁2024年PDF转PPT新技能,TOP4神器在手,职场晋升竟然如此简单

如今职场节奏快&#xff0c;信息传递和展示方式多样。PDF 兼容性强且稳定&#xff0c;用于分享和保存文件&#xff1b;PPT 演示功能强大&#xff0c;在开会、教学和汇报中不可或缺。实际工作中常需将 PDF 转 PPT&#xff0c;以便更好地演示和编辑。市场上因此出现众多高效方便的…

使用NetBackup GUI 图形化进行oracle备份和恢复

转载 一、环境介绍&#xff1a; 这个实验都是在vmware workstation里完成的。由于NetBackup7只能装在64位的系统上&#xff0c;所以这里采用了64位的rhel5.5系统&#xff0c;以及oracle 10gr2 for linux_x64的软件包。数据库的数据文件存储在ASM中。安装rhel、oracle、netback…

Selenium 实现图片验证码识别

前言 在测试过程中&#xff0c;有的时候登录需要输入图片验证码。这时候使用Selenium进行自动化测试&#xff0c;怎么做图片验证码识别&#xff1f;本篇内容主要介绍使用Selenium、BufferedImage、Tesseract进行图片 验证码识别。 环境准备 jdk&#xff1a;1.8 tessdata&…

关于CPP——std::future异步操作

目录 一、std::future 简介 1.1 概念 1.2 应用场景 1.3 关联的方法 1.3.1 std::async 1.3.2 std::package 1.3.3 std::promise 二、future 用法 2.1 使用std::async关联异步任务 2.2 使用std::packaged_task 1. 获取任务结果的机制&#xff1a; 2. 异步任务的管理&a…

jmeter之仅一次控制器

仅一次控制器作用&#xff1a; 不管线程组设置多少次循环&#xff0c;它下面的组件都只会执行一次 Tips&#xff1a;很多情况下需要登录才能访问其他接口&#xff0c;比如&#xff1a;商品列表、添加商品到购物车、购物车列表等&#xff0c;在多场景下&#xff0c;登录只需要…

【STM32 Blue Pill编程】-ADC数据采样(轮询、中断和DMA模式)

ADC数据采样(轮询、中断和DMA模式) 文章目录 ADC数据采样(轮询、中断和DMA模式)1、硬件准备及接线2、ADC轮询模式2.1 轮询模式配置2.2 代码实现3、ADC中断模式3.1 中断模式配置3.2 代码实现4、ADC的DMA模式4.1 DMA模式配置4.2 代码实现在本文中,我们将介绍如何使用 ADC 并…

[JAVA基础知识汇总-1] 创建线程的几种方式

文章目录 1. 继承Thread类2. 实现Runnable接口3. 实现Callable接口4. 线程池 可以认为有四种方式&#xff0c;也可以认为有一种&#xff0c;因为都跟Runnable接口有关 1. 继承Thread类 代码 public class Thread1ExtendsThread extends Thread { // public Thread1(String …

思维导图与头脑风暴:你值得拥有的四大工作与学习利器

在工作与学习中&#xff0c;我们都遇到过这样的情况&#xff1a;我们需要就某一问题或项目&#xff0c;汇集多人的智慧与创意&#xff0c;这时&#xff0c;头脑风暴便成为了我们不可或缺的利器&#xff1b;而为了更好地进行头脑风暴&#xff0c;选择一款合适的在线思维导图工具…