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

news/2024/9/17 7:16:55/ 标签: git, 学习, 笔记

文章目录

    • 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

分别尝试如下别名:

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

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

git_git_graph_37">别名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)

实测效果:
<a class=git graph" />

git_unmerged_49">别名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

实测效果:

<a class=git unmerged" />

git_git_st_71">别名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

git_git_s_84">别名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/aliasesM foo
?? test

实测效果:

<a class=git s - with status & branch info" />

git_l1_103">别名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 +0200Better spaceship design1 file changed, 9 insertions(+), 9 deletions(-)

实测结果:
<a class=git l1" />

git_l5_122">别名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

实测结果:

<a class=git l5" />

git_ll_134">别名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

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

git_upstream_145">别名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 

git_details_154">别名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

实测结果:

<a class=git details" />

git_root_166">别名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

实测效果:
<a class=git root" />

git_path_185">别名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

git_abandon_195">别名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/aliasesM bar
M  foo
?? test
$ git abandon HEAD
$ git s
## aliases...origin/aliases
?? test

实测效果:

<a class=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.ppmy.cn/news/1522136.html

相关文章

spring,spring_mybatis集成

Spring概述 Spring 是一个轻量级的,IOC 和 AOP 的一站式 Java 开发框架&#xff0c;是为了简化企 业级应用开发而生的。&#xff08;整个后端框架进行管理&#xff09; Ioc 即 Inversion of Control&#xff08;控制反转 把创建对象的控制权反转给sring框架&#xff09;&…

《CounTR: Transformer-based Generalised Visual Counting》CVPR2023

摘要 本论文考虑了通用视觉对象计数问题&#xff0c;目标是开发一个计算模型&#xff0c;用于计算任意语义类别的对象数量&#xff0c;使用任意数量的“样本”&#xff08;即可能为零样本或少样本计数&#xff09;。作者提出了一个新颖的基于Transformer的架构&#xff0c;称为…

ELK学习笔记(二)——使用K8S部署Kibana8.15.0

上篇文章我们完成了&#xff0c;ES的集群部署&#xff0c;如果还没有看过上篇文章的兄弟&#xff0c;可以去看看。 ELK学习笔记&#xff08;一&#xff09;——使用K8S部署ElasticSearch8.15.0集群 话不多说&#xff0c;接下来直接进入kibana的搭建 一、下载镜像 #1、下载官方…

Echarts中国地图省市区县三级联动

NodeV14.20.0安装 # 历史版本Node下载地址 https://nodejs.org/en/download/prebuilt-installer# NodeV14.20.0配置与部署 https://nodejs.org/dist/v14.20.0/node-v14.20.0-x64.msi构建默认Vue3工程目录 npm install -g vue/cli --registryhttps://registry.npm.taobao.org …

综合案例-数据可视化-折线图

一、json数据格式 1.1 json数据格式的定义与功能 json是一种轻量级的数据交互格式&#xff0c;可以按照json指定的格式去组织和封装数据&#xff0c;json数据格式本质上是一个带有特定格式的字符串。 功能&#xff1a;json就是一种在各个编程语言中流通的数据格式&#xff0…

常用排序算法(上)

目录 前言&#xff1a; 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3 常见的排序算法 2.常见排序算法的实现 2.1 堆排序 2.1 1 向下调整算法 2.1 2 建堆 2.1 3 排序 2.2 插入排序 2.1.1基本思想&#xff1a; 2.1.2直接插入排序&#xff1a; 2.1.3 插…

光伏项目报告如何做?能否自动生成?

一、光伏项目做报告的必要性 在光伏项目开发过程中&#xff0c;编制一份详尽、准确的光伏项目报告是至关重要的环节。这份报告不仅是对项目建设的全面调查和评估&#xff0c;更是项目立项、审批、融资、设计、建设及运营等多个阶段的重要参考依据。光伏项目报告通过深入分析项…

项目实战 ---- 商用落地视频搜索系统(6)---UI 结构及与service互动

目录 背景 技术问题 描述 Jinja2 概述 特性 问题解决手段 问题1 问题2 问题3 代码实现 前端代码 python代码 解释 页面展示 home 上传视频 搜索视频 背景 通过1-5 我们已经搭建好完整的后台功能,service,及准备与UI 交互的路由及接口。下面就是UI 部分的搭…

统计学习方法与实战——统计学习方法概论

统计学习方法概论 文章目录 统计学习方法概论前言章节目录导读 实现统计学习方法的步骤统计学习方法三要素模型模型是什么? 策略损失函数与风险函数常用损失函数ERM与SRM 算法 模型评估与模型选择过拟合与模型选择 正则化与交叉验证泛化能力生成模型与判别模型生成方法判别方法…

Spark的Web界面

http://localhost:4040/jobs/ 在顶部导航栏上&#xff0c;可以点击以下选项来查看不同类型的Spark应用信息&#xff1a; Jobs - 此视图将列出所有已提交的作业&#xff0c;并提供每个作业的详细信息&#xff0c;如作业ID、名称、开始时间、结束时间等。Stages - 此视图可以查…

线性因子模型 - 引言篇

序言 在当今数据爆炸的时代&#xff0c;如何从海量、高维的数据中提炼出有价值的信息&#xff0c;已成为机器学习乃至人工智能领域的重要课题。深度学习&#xff0c;作为这一领域的璀璨明珠&#xff0c;凭借其强大的特征学习与表示能力&#xff0c;在图像识别、自然语言处理、…

探索EasyCVR与AI技术深度融合:视频汇聚平台的新增长点

随着5G、AI、边缘计算、物联网&#xff08;IoT&#xff09;、云计算等技术的快速发展&#xff0c;万物互联已经从概念逐渐转变为现实&#xff0c;AIoT&#xff08;物联网人工智能&#xff09;的新时代正在加速到来。在这一背景下&#xff0c;视频技术作为信息传输和交互的重要手…

深入RabbitMQ世界:探索3种队列、4种交换机、7大工作模式及常见概念

文章目录 文章导图RabbitMQ架构及相关概念四大核心概念名词解读 七大工作模式及四大交换机类型0、前置了解-默认交换机DirectExchange1、简单模式(Simple Queue)-默认DirectExchange2、 工作队列模式(Work Queues)-默认DirectExchange3、发布/订阅模式(Publish/Subscribe)-Fano…

【Java毕业设计】基于SpringBoot+Vue+uniapp的农产品商城系统

文章目录 一、系统架构1、后端&#xff1a;SpringBoot、Mybatis2、前端&#xff1a;Vue、ElementUI4、小程序&#xff1a;uniapp3、数据库&#xff1a;MySQL 二、系统功能三、系统展示1、小程序2、后台管理系统 一、系统架构 1、后端&#xff1a;SpringBoot、Mybatis 2、前端…

水晶连连看 - 无限版软件操作说明书

水晶连连看 – 无限版游戏软件使用说明书 文章目录 水晶连连看 – 无限版游戏软件使用说明书1 引言1.1 编写目的1.2 项目名称1.3 项目背景1.4 项目开发环境 2 概述2.1 目标2.2 功能2.3 性能 3 运行环境3.1 硬件3.2 软件 4 使用说明4.1 游戏开始界面4.2 游戏设定4.2.1 游戏帮助4…

数据库MySQL基础

目录 一、数据库的介绍 1.数据库概述 &#xff08;1&#xff09;数据的存储方式 &#xff08;2&#xff09;数据库 2.常见数据库排行榜 二、数据库的安装与卸载 1.数据库的安装 2.数据库的卸载 三、数据库服务的启动与登录 1.Windows 服务方式启动 &#xff08;1&…

如何解决PCDN技术与边缘计算技术融合后的安全和隐私问题(壹)?

PCDN&#xff08;Peer-assisted Content Delivery Network&#xff09;技术与边缘计算技术的融合可以带来显著的性能提升和效率优化&#xff0c;但同时也带来了新的安全和隐私挑战。以下是一些解决这些安全和隐私问题的操作策略&#xff1a; 1. 强化数据加密 传输加密&#x…

U盘怎么加密保护?U盘加密方法介绍

在数字化时代&#xff0c;U盘作为一种便携式存储设备&#xff0c;广泛应用于我们的日常生活和工作中。然而&#xff0c;U盘中存储的数据安全性问题日益凸显。为了保护个人隐私和重要数据&#xff0c;学会U盘加密方法显得尤为重要。本文将为您详细介绍几种U盘加密方法&#xff0…

linux————根据端口查找运行目录的三种方法

先查询端口找到进程 netstat -anlpt | grep 16443 | grep -v grep tcp 0 0 0.0.0.0:16443 0.0.0.0:* LISTEN 3710563/nginx: mast tcp 0 0 192.168.110.253:16443 192.168.110.22:64430 ESTABLISHED 3710580/n…

Spark MLlib模型训练—回归算法 Survival Regression

Spark MLlib模型训练—回归算法 Survival Regression 生存回归(Survival Regression)是一种用于分析时间到事件数据的回归方法,广泛应用于医学、生物统计学、工程可靠性分析等领域。它的核心是预测一个事件发生的时间或概率,比如患者生存时间、设备故障时间等。本文将详细…