Git 笔记 - git commit

2023-11-13

01 git commit

如果没有设置 -m 选项,直接运行 git commit 会出现什么情况呢?

答案是: Git 会尝试为你打开一个编辑器以填写提交信息。 如果 Git 在你对它的配置中找不到相关信息,默认会打开 vim。如下图:
commit0
接下来,需要键盘敲 i 进入编辑模式,而后在第一行,即红色区域部分填写提交信息:
commit1
信息编辑好之后按 ESC,键盘敲 :wq ,即保存并退出:
commit2
最后你会看到控制台的返回消息:

$ git add .
$ git commit
[master 1bbbda5] init hello
 1 file changed, 1 insertion(+)
 create mode 100644 hello.js

02 git commit -m

 # 方式 1
 git commit -m <msg>
 # 方式 2
 git commit --message=<msg>

描述 :使用给定 msg 作为提交消息,即 Git 就不会打开编辑器了,也就省略了上面的步骤了。

注意-m-c -C -F 是相互排斥的!

03 git commit -a

 # 方式 1
 git commit -a
 # 方式 2
 git commit --all

描述 :修改文件后不需要执行 git add 命令,直接就可以提交。

注意 :新建的文件除外!

04 git commit -p

 # 方式 1
 git commit -p
 # 方式 2
 git commit --patch

描述 :使用交互式界面来选择要提交的更改,让用户有机会在将修改后的内容提交前查看差异。

使用示范

$ git commit -p
diff --git a/hello.js b/hello.js
index 2ccb4c8..31b09bc 100644
--- a/hello.js
+++ b/hello.js
@@ -1,2 +1,3 @@     # ----这里会显示你的修改----
-let hello = 1;     # ----这里会显示你的修改----
+let hello = 123;
 let world = 456;
+let people = 789;  # ----这里会显示你的修改----
(1/1) Stage this hunk [y,n,q,a,d,e,?]?  # 此处需要输入你想要执行的操作
# --------- 下面是每个选项的意思 ---------- 
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
e - manually edit the current hunk
? - print help
# --------- 上面是每个选项的意思 ---------- 

05 git commit -C

 # 方式 1
 git commit -C
 # 方式 2
 git commit --reuse-message=<commit>

描述 :获取现有的提交对象 commitId ,并在创建提交时重用日志消息和作者信息(包括时间戳)。换句话说就是重新使用之前提交过的信息去提交新的更改。

使用示范

# 先查看重用信息的 commitId
$ git log
commit aa63767da23f357136333b7ce18175c414b189ec (HEAD -> master)
Author: xxxxxx<xxxxxx.com>
Date:   Mon Oct 25 16:30:41 2021 +0800

    change hello
    
commit fcadef453058fb4b97b7c0cbc2994bed3a81302e
Author: xxxxxx<xxxxxx.com>
Date:   Mon Oct 25 16:30:06 2021 +0800

    init
    
# 举例:重用 init 的提交信息
$ git commit -C fcadef453058fb4b97b7c0cbc2994bed3a81302e
[master e82bdf2] init
 Date: Mon Oct 25 16:30:06 2021 +0800
 1 file changed, 1 insertion(+), 1 deletion(-)

结果如下:(作者,时间和信息都是一样的噢)
commitC

06 git commit -c

 # 方式 1
 git commit -c
 # 方式 2
 git commit --reedit-message=<commit>

描述 :与 -C 类似,但使用 -c 会调用编辑器,以便用户可以进一步编辑提交消息,即与 -C 相比多了一项修改编辑的步骤。

07 git commit -n

 # 方式 1
 git commit -n
 # 方式 2
 git commit --no-verify

描述 :这个选项可以绕过 pre-commitcommit-msg

08 git commit --amend

描述 :通过创建新提交来替换当前分支的提交信息。

使用示范 1 :修改上一次的提交信息。

# 查看最新的提交信息
$ git log   
commit 155f771f90997b88dd71d4952dee3cf15618af1b (HEAD -> master)
Author: xxxxxx<xxxxxx.com>
Date:   Mon Oct 25 17:15:08 2021 +0800

    edit test

commit 69322b677a3a6be363ba559610988607480677ce
Author: xxxxxx<xxxxxx.com>
Date:   Mon Oct 25 17:11:30 2021 +0800

    init

# 举例:将 edit test 提交信息修改为 modify test

执行命令 git commit --amend ,会出现下面的编辑界面,将红色框选区中修改为想要的信息:
在这里插入图片描述
结果预览:修改之后查看提交记录,发现提交信息已经按照预期进行了修改,同时需要注意 commitId 也发生了变化。
在这里插入图片描述

使用示范 2 :将最近的修改追加到上一次的提交上。

# 查看最新的提交信息
$ git log           
commit 6681933eee000dcb99acc18f6c0fb246c551a7ad (HEAD -> master)
Author: xxxxxx<xxxxxx.com>
Date:   Mon Oct 25 17:15:08 2021 +0800

    modify test

commit 69322b677a3a6be363ba559610988607480677ce
Author: xxxxxx<xxxxxx.com>
Date:   Mon Oct 25 17:11:30 2021 +0800

    init

# 查看当前文件状态
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   test.js

no changes added to commit (use "git add" and/or "git commit -a")

# 暂存文件
$ git add .

# 将修改追加到上一次提交
$ git commit --amend

# 如果需要修改提交信息,则可以在出现编辑界面时进行修改;
# 若想保持上次提交信息,则直接退出 :q 编辑界面;
# ------------- 下面是编辑器显示内容------------
modify test

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Mon Oct 25 17:15:08 2021 +0800
#
# On branch master
# Changes to be committed:
#       modified:   test.js
#
~                                                                                                                                                                  
~                                                                                                                                                                  
~                                                                                                                                                                  
"~/Documents/code/test/.git/COMMIT_EDITMSG" 11L, 266B
# ------------- 上面是编辑器显示内容------------

结果预览:追加提交完成, commitId 也发生了变化。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git 笔记 - git commit 的相关文章

  • 将更改从一个分支复制到另一个分支

    我有一个分支名为BranchA from master 我有一些改变BranchA 我不会合并来自BranchA to master 现在我创建了另一个分支master named BranchB 我如何复制更改BranchA to Bra
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • git 是否有任何静态接口?

    我一直在寻找一个宁静的 git api 但似乎没有找到 我得到的最接近的是 Github 的 api 来访问一些存储库信息 还有其他的实施吗 Orion Git API http wiki eclipse org Orion Server
  • Git:如何修改服务器的提交?

    我已经在 EC2 上的 git 服务器上推送了一些提交 而不是在 github 上 如何修改 git 服务器上的这些提交 操作就像 删除提交 例如变基 更改提交消息 是否可以 非常感谢 你几乎可以通过用力推动来完成所有事情 将您的本地树更改
  • GIT:提交时“致命:无法写入 new_index 文件”

    当我尝试将更改提交到本地存储库时 我收到以下消息 致命 无法写入 new index 文件 As this 线程说明 http luhman org blog 2010 04 05 git fatal unable write newind
  • 如何从 GitHub 上彻底删除问题?

    是否可以从 GitHub 问题跟踪器中完全删除问题 不可以 github API 只允许您打开 关闭 重新打开问题 这是问题 API 文档 http developer github com v3 issues
  • 为 RHEL 6 安装/构建 git-svn

    我无权访问 RHEL6 存储库 那么在 RedHat Enterprise Linux 6 上构建和 或安装 git svn 工具的最佳方法是什么 通过卸载现有的 yum擦除git 并从源安装最新的来设法安装git和git svn 1 7
  • 哪些 git hooks 适用于“git rebase --continue”?

    我正在尝试为我的组织构建一组 git hook 脚本 我想使用的一个脚本 仅用于我自己的多个项目 将是检查git rebase continue我的代码中没有留下任何冲突标记 lt lt lt lt lt or gt gt gt gt gt
  • Git checkout 不会丢弃我的更改

    我在 Windows XP 上使用 git 1 7 1 和 cygwin 这个问题可以通过例子得到最好的说明 git status On branch master Changed but not updated use git add
  • 在推送后检索孤立的提交对象 --force

    Doing push force总是有点冒险 这里有一个例子 说明它如何产生一些问题 例如远程丢失修订版本 假设 有一个人Bob已更新远程master分支来自B to C 还有另外一个人Mike还没有获取此更新并且HEAD of his m
  • 如何在GIT中构建标签树?

    作为 GIT 的频繁用户 我喜欢git log graph尽我所爱git tag 我负责一个大型 GIT 存储库 其中有太多分支和标签 而且我的处理速度太慢西西弗斯式的 https en wikipedia org wiki Sisyphu
  • 如何仅根据拉取请求在 Jenkins 中运行阶段?

    我现在有一个基于 Jenkinsfile 的管道 其中包含多个阶段 每次提交到 Github 时都会由 webhook 触发 我想在每次提交时保持 构建 和 单元测试 阶段运行 但仅在分支准备拉取请求时运行 集成测试 阶段 我想要的是 st
  • Jmeter 和 Bitbucket 服务器负载测试

    我是 Jmeter 的新手 我有一个本地托管的 Bitbucket 服务器 有时 当 Bamboo plan 触发并发 git 克隆操作时 会发现 Bitbucket 服务器变得缓慢 无响应 我必须重新启动服务 我想通过对另一个本地创建的
  • 在 github 操作中部署到 PR 上的 Firebase 托管失败

    我尝试使用 firebase 创建实时预览 我写yml文件及其始终失败 This file was auto generated by the Firebase CLI https github com firebase firebase
  • 如何修改 git add 来处理已删除的文件?

    我从 git 存储库中删除了一些文件 现在 根据状态查看 Changes not staged for commit deleted project war favicon ico deleted project war index htm
  • 如何在 Visual Studio 2013 中使用 Git 的外部 diff 工具?

    我找到了这个帖子 http architects dzone com articles how configure diff and merge这解释了如何让 Visual Studio 2013 在比较 Git 中的文件时使用内置 dif
  • 如何在 EGit 中创建正确的新本地和远程分支组合?

    我想在 Egit 中执行以下操作 git checkout b newbranch git push u origin newbranch 这给了我一个新的本地分支 将其推送到上游服务器并创建正确的跟踪参考 我如何在 Egit 中做同样的事
  • 使用 git 合并两个截然不同的分支?

    我有我的master分支和我的verydifferentbranch它们有相同的祖先 大约 300 次提交前 现在verydifferentbranch功能完整我想把它放在master下面branch 进行变基会导致每个补丁都有很多合并冲突
  • 如何从 Git 存储库中删除选定的提交日志条目,同时保留其更改?

    我想从线性提交树中删除选定的提交日志条目 以便这些条目不会显示在提交日志中 我的提交树看起来像 R A B C D E HEAD 我想删除 B 和 C 条目 以便它们不会显示在提交日志中 但应保留从 A 到 D 的更改 也许通过引入单个提交
  • 推送更改到 Git 不起作用

    每次我想要提交命令 git push heroku master 时 系统都会要求我在 PowerShell 中输入凭据 当我输入 heroku 凭据 默认情况下连接到 git 时 我收到错误消息 但是 当我输入我的主目录中的 netrc

随机推荐

  • shell 多个引号冲突_请教Linux shell命令中双引号与单引号嵌套的问题

    addr 192 168 0 111 echo addr 结果为 192 168 0 111 echo addr 结果为 addr 这两个我还可以理解 1 双引号内的单引号功能被关闭 反之亦然 2 双引号内的 功能被保留 单引号 addr
  • fatal: Authentication failed for ‘https://github.com

    记录在本地电脑建立与GitHub连接时遇到的错误 附上解决方案 git clone 遇到的错误 remote Support for password authentication was removed on August 13 2021
  • osx 常用defaults命令

    defaults命令用来对mac os x系统进行某些设置 常用命令 查看所使用的defaults命令 history grep defaults 分类查看defaults命令 history grep defaults write his
  • JavaScript数据结构——字典(Dictionary)

    概念和结构 字典里面的元素都是一个键 key 值 value 对 字典里面的元素的键 key 不能重复 值 value 可以重复 字典的操作 字典有八种常用操作 分别为 检查键是否存在 has key 添加元素 set key value
  • js 搜索模糊匹配

    searchvalue list keyWord if keyWord var reg new RegExp keyWord var arr for var i 0 i lt list length i if reg test list i
  • Java8-对List转换Map、分组、求和、过滤

    前言 在java8之后我们list转map再也不用循环put到map了 我们用lambda表达式 使用stream可以一行代码解决 下面我来简单介绍list转map的几种方式 和转为map后对map进行分组 求和 过滤等操作 正文 数据准备
  • C#实现百度地图附近搜索&调用JavaScript函数

    前一篇文章 C 调用百度地图API入门 解决BMap未定义问题 讲述了如何通过C 调用百度API显示地图 并且如何解决BMap未定义的问题 这篇文章主要更加详细的介绍百度地图的一些功能 包括附近搜索 城市搜索 路线规划 添加覆盖物等等 希望
  • ipv6的链路本地地址

    目录 简介 先决条件 要求 使用的组件 规则 配置 网络图 配置 验证 检验 OSPF 的配置 正在验证的链路本地地址可接通性 ping从远程网络的链路本地地址 直接ping从连接的网络的链路本地地址 相关信息 简介 本文目的将提供对在网络
  • Qt漂亮界面

    Qt漂亮界面 功能规划 一 去掉菜单栏和工具栏 二 顶部导航栏的设计 appinit h头文件 appinit cpp的文件 使用方式 三 阵列按钮的点击事件写法 四 重写缩写界面 放大界面和关闭程序事件 五 鼠标事件的处理 Qt大量同类控
  • mysql数据库内容导出,MySql数据库导出

    Navicat Premium Data Transfer Source Server 刘文鹏 Source Server Type MySQL Source Server Version 50540 Source Host 127 0 0
  • 关于X79主板至强E5 CPU安装ArchLinux的记录

    最近想在家里搭网站 打算弄两台服务器 一个是旧机器x79主板的 作为AI绘图和Chatglm部署用 一个新买的是带有N5095的小板子 装了CentOS7来当web服务器 当作前置服务器 主要为外网提供服务 装CentOS7比较简单容易 所
  • TransFusion:利用 Transformer 进行鲁棒性融合来进行 3D 目标检测

    Query 初始化 Input dependent 以往 Query 位置是随机生成或学习作为网络参数的 而与输入数据无关 因此需要额外的阶段 解码器层 来学习模型向真实对象中心移动的过程 论文提出了一种基于center heatmap 的
  • VC6.0使用教程

    使用之前我们先准备一段代码 include
  • C#将依赖的DLL文件集成到EXE内部

    使用场景 C 写的一些小程序 为了方便传播 减少传播文件数量 将依赖的DLL文件集成到EXE内部是必要的 解决方案 打开 管理NuGet程序包 在浏览中搜索 Costura Fody 点击 安装 按钮 等待下载依赖及安装完成 重新编译软件
  • 操作系统7-信号量与管程

    回顾一下 并发问题 多线程并发导致资源竞争 同步概念 1 协调多线程对共享数据的访问 2 任何时刻只能由一个线程执行临界区代码 确保同步正确的方法 底层硬件支持 高层次的编程抽象 锁 信号量是锁机制在同一层上的高层抽象编程方法 一 信号量s
  • html如何设置网页的背景图片

    div div
  • Web安全面试题之-信息搜集(1)

    1 信息收集如何处理子域名爆破的泛解析问题 根据一个不存在的子域名的解析IP 来记录获取黑名单 IP 在爆破字典时 如果解析的IP在这个黑名单中 则默认跳过 如果不存在 我们则入库处理 还有一种泛解析的爆破处理方式是根据TTL来做判断 我们
  • 【Linux基础及shell脚本】Shell脚本中变量的使用

    文章目录 1 Shell变量基础 1 1 什么是变量 1 2 如何在Shell中定义和使用变量 2 Shell环境变量 2 1 什么是环境变量 2 2 环境变量与普通变量的区别 2 3 如何查看 设置和删除环境变量 3 Shell位置参数
  • 串口通信及中断

    异步通信 发送和接收数据的双方用各自的时钟控制数据的发送和接收 为降低数据传输的错误率要求双方时钟尽可能一致 异步通信以帧为单位传送数据 由于每帧数据都具有起始位和停止位所以两帧数据之间的间隔时间不影响数据传送和接收的准确率 但是每帧数据内
  • Git 笔记 - git commit

    文章目录 01 git commit 02 git commit m 03 git commit a 04 git commit p 05 git commit C 06 git commit c 07 git commit n 08 gi