git - 在没有变基的情况下添加对 git 上的先前提交的更改
问题描述
假设我的分支中有以下提交:
commit A
commit B
commit C
commit D
我做了一些准备提交的更改,但是我想添加这些更改,commit C
因为它们与该提交更相关。
我处理这个问题的方法是做一个临时的 commit git add . && git commit -m 'temp'
,然后git rebase -i HEAD~4
我就可以合并commit temp
在一起commit C
了。我想知道,有没有办法做到这一点而不必创建临时提交?
解决方案
不,您不能像这样修改最后一个提交以外的提交。
原因是在修改提交时,所有后续提交也必须更新。它们基本上将被重新创建,因为它们现在指向一个新的父级。这就是在 rebase 期间发生的事情:正在重写一系列提交。
如果您只想修改最新的提交 (HEAD),则没有将该提交作为其父提交的提交。所以没有需要重写的提交链。在这种情况下,您可以使用git commit --amend
. 这会将您必须的任何分阶段更改添加到先前的提交中。修改一个提交基本上就像一个单一提交的变基。
因此,如果不进行变基,您将无法真正完成这项工作。我个人认为交互式变基是最好的方法:它允许您继续提交您的更改,然后您可以重新排序或重新组织您所做的提交以改进历史记录。
您还可以做的是检查您想要更改的提交,修改它,然后在修改后的提交之上以非交互方式重新设置原始分支。但这很容易比交互式变基复杂一些,因为现在您需要处理分支和提交引用。
推荐阅读
- tensorflow - google colab 上已安装驱动器的数据加载器
- python - 有没有办法让pygame检测我的光标在什么颜色上
- c - 如何从字符串文字中打印特殊字符作为它们的“反斜杠”符号?
- github - 如何查看未加密的 git 机密?
- php - 如何在单个 tables.sql 文件中编写多个查询并使用 PHP 上传?
- reactjs - 如何定位 iframe 中的 reCAPTCHA 元素以显示它,而不是其他(Gatsby/React)?
- java - 假设@Transient 使JPA 提供程序始终保持带注释的字段不变,是否安全?
- reveal.js - Reveal.js 在图像上显示水平线
- java - 我不知道为什么我的 springboot 应用程序无法查询数据库
- reactjs - 无法在 Reactjs 中暂停音频