【问题标题】:Merge multiple commits into one in git在 git 中将多个提交合并为一个
【发布时间】:2021-10-06 06:21:50
【问题描述】:

Commit 1 包含 file1file2

我在file2 中做了一些更改,并将其提交为commit2 但我希望commit2 包含file1file2,即使file1 没有变化。

或者

我想要一个包含/合并 commit1commit2 的提交

有没有办法在 git 中做到这一点?

为什么我必须在提交中包含未修改的文件?

我的部署使用作为提交的一部分生成的哈希 id。所以在这种情况下,如果我提供commit2,那么它将只包含file2,因此我想创建一个包含commit1commit2 中的更改的提交。这可能是一种非常规的方式,但这是我的要求!

【问题讨论】:

  • 如果您没有实际更改文件,为什么需要在提交中包含文件?这样做有什么用例?
  • 只需将 2 个提交压缩为 1 个。该问题已在此处得到解答:stackoverflow.com/questions/5189560/…
  • @Vivek 您可以在 file1 中添加一个空格,并在 Git 中禁用 ignore whitespace。你将能够提交它。或者添加 cmets,反之亦然。如果您想在commit2 中包含所有以前的更改,请使用squash,如其他人所述
  • “包含”是什么意思?我提交不包含文件。它包含对树的引用。树包含对 blob 的引用。文件 1 的内容位于提交引用的树中的 blob 中。所以提交已经“包含”文件 1。
  • 虽然您可以 压缩提交,但在确切知道您要解决的问题之前,我真的很犹豫是否真的建议这样做。挤压可能是不必要的。与进行人为更改(例如空格/cmets)相同,只是为了强制它出现在提交中。

标签: git git-commit


【解决方案1】:
git reset --soft HEAD~2

其中 2 是您要回滚的提交数。之后,您将在两次提交中所做的所有更改都未提交。您将需要再次提交。

【讨论】:

  • 在我清楚地理解要解决的问题之前,我会暂缓回答。
  • 该人说:我的 CR 部署只能包含一个提交 ID,我们必须在单个提交中包含与 CR 相关的所有文件。我不得不在一些开源项目中这样做。这是贡献的要求,就像这里:github.com/keycloak/keycloak-operator/blob/master/…
  • @mason 无论上面提供什么都是要求!亚历克斯的回答确实解决了我的问题!
猜你喜欢
  • 2017-05-07
  • 2011-10-16
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 2016-03-23
相关资源
最近更新 更多