将空提交推送到远程仓库

557

我已经向远程推送了一个提交,但现在意识到提交消息不正确。我想更改提交消息,但据我所知这是不可能的。因此,我决定创建一个空提交,并使用正确的消息:

git commit --allow-empty

推送空提交是否存在任何缺点/后果?因为这个空提交,我将来会面临什么问题吗?


2
请查看类似的问题:https://dev59.com/o2025IYBdhLWcg3wGB0n - Montaro
7个回答

700

一个空提交的用途是在一个环境中强制进行构建,其中每当推送新提交时都会触发构建。

git commit --allow-empty -m "Trigger Build"

36
虽然这段代码可能解决了问题,但是加上一个解释说明它是如何解决问题的,为什么这样做可以提高你的帖子质量,并且可能会得到更多点赞。请记住,你回答问题不仅是为了现在的提问者,也是为了未来的读者。请编辑你的回答,添加解释并指出适用的限制和假设。 - double-beep
1
-m 是什么作用? - Adam B
7
-m - 提交记录的信息。 - Vizionz
2
请注意,如果你的 git 索引没有指向 HEAD(即你有文件处于“已添加”状态),这些文件将被提交。 你可能需要先执行 git reset 命令来清除索引。 请注意,git reset 命令不会更改你的工作目录中的内容,因此你不会丢失你的工作更改。 - SimonC
3
@double-beep 这段代码本身已经足够自我说明,但我添加了一句解释性的话。 - M. Justin
1
这并没有回答原帖中关于空提交的缺点/后果和长期影响的问题。 - joeljpa

110
你不会面临任何可怕的后果,只是历史看起来有点混乱。
你可以通过以下方式更改提交信息:
git commit --amend
git push --force-with-lease # (as opposed to --force, it doesn't overwrite others' work)

但是,这将用你的历史记录覆盖远程历史记录,这意味着如果有人在此期间拉取了该仓库,那个人会对你非常生气...
只有你一个人访问该仓库时才这样做。

10
是的,这就是为什么我更喜欢推送空提交的原因。 - mrutyunjay
4
如果有其他人拉取了该代码库,那么是的,我认为这是一个更好的选择。 - Gabriele Petronella
3
您不会面临任何可怕的后果,只是历史看起来有点混乱。-- 真是太好了,没有可怕的后果!;-) - Alois Mahdal
8
建议使用--force-with-lease选项以避免丢失合作者的工作。 - Kenzo
@GabrielePetronella 太搞笑了!哈哈,是的,yours总是会破坏良好的友谊。 - alansaldivar
错误:src refspec master与任何内容都不匹配 错误:无法将某些引用推送到'https://github.com/' - CS QGB

46

推送提交,无论是否为空,都会触发最终git hooks。这可能什么也不做,也可能产生举世震惊的后果。


22
这是一个被低估的观察。是的,空提交可能比修改已推送的提交要好,但如果可能存在钩子,它们不能被假定为没有副作用。 - wintermute92
1
另外,如果您正在测试新的 Web 钩子......推送空提交似乎是一个不错的想法。 - fIwJlxSzApHEZIl
特别是如果在一个临时分支上完成。 - M. Justin
你能举个例子说明“破坏性后果”吗?我很好奇 :) - alexis_thual
@alexis_thual 这完全取决于你的钩子。 :) - undefined

22

推送空提交是否有任何缺点或后果?

除了可能会让主分支上出现一堆没有内容的提交,从而导致极度混乱外,实际上并没有什么缺点。

你可以更改已经推送到远程的提交,但是该提交的sha1(基本上是其ID号码)将永久更改,这会影响源树--你随后需要使用git push -f强制推送回远程。


17
只要您在空提交中清楚地引用了其他提交,就应该没问题。可以像这样:
Commit message errata for [commit sha1]

[new commit message]

正如其他人所指出的那样,这通常比强制推送一个更正的提交要好。


1
关于混乱的历史,我有一个提议,以便最终让未来考古学家的生活变得更加轻松。
git commit --allow-empty -m "message for commit DEADBEF was wrong. Correct Msg: ..."

DEADBEF代表具有错误消息的提交的提交哈希(SHA)。

或者,如果不允许创建空提交,可以创建一个文档。

commitcomments/$SHA.txt

添加/提交并推送。

顺便说一句:无论如何,Git历史经常令人困惑 :)


-3
这个怎么样?
git commit --allow-empty-message -m ''

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接