【问题标题】:Git: change HEAD commit's message without touching the indexGit:在不触及索引的情况下更改 HEAD 提交的消息
【发布时间】:2012-01-28 14:58:00
【问题描述】:

我知道我可以使用git commit --amend --file=path-to-my-new-message,但这也会修改分阶段的更改。当然,我可以存储并稍后应用和删除存储,但是有没有更快的解决方案来更改 HEAD 提交消息而不提交分阶段的更改(和用户交互)?

【问题讨论】:

  • 这是一个很好的问题,我敢打赌有办法做到这一点,但由于这是一个不常见的操作,我猜我永远不会记得命令行参数来做到这一点。 Stash/amend/pop 可能更实用。

标签: git commit commit-message


【解决方案1】:

您可以将新的提交消息写入文件(例如msg.txt)并使用git commit-tree,例如

new_head=$(git commit-tree HEAD^{tree} -p HEAD^ <msg.txt)

git reset --soft $new_head

这假设您正在修改的提交有一个父级,如果没有,您需要进一步提供 -p HEAD^2 -p HEAD^3 ...

它有点丑陋和低级。您可能会发现隐藏更改并使用直接“修改”更容易。

git stash
git commit --amend
git stash pop --index

正如@Jefromi 建议的那样,您还可以使用临时索引文件进行修改操作,例如

GIT_INDEX_FILE=.git/tmpidx git reset
GIT_INDEX_FILE=.git/tmpidx git commit --amend
rm .git/tmpidx

【讨论】:

  • 我敢打赌,您也可以使用 GIT_INDEX_FILE!但这对我来说似乎更干净。
  • 我可以使用现有 HEAD 提交的父提交的 SHA ID 来代替 HEAD^、HEAD^2、...吗?
  • @Mike L.:嗯,是的,但你为什么要这么做? HEAD^n 的输入会更短,您无需查找。
  • 我必须查一下——至少要数一下人头。
  • @Jefromi:实际上,我喜欢你的 GIT_INDEX_FILE 解决方案,它看起来很干净。
【解决方案2】:

根据手册页git commit --amend --only 没有指定任何路径应该可以完成这项工作,但这对我不起作用。作为一种变通方法,您可以临时添加一个文件并再次将其删除,修改两次:

touch tmp
git add tmp
git commit --amend -m "new message" tmp
git rm tmp
git commit --amend -m "new message" tmp

【讨论】:

  • 酷,这似乎是迄今为止最好的解决方案。
【解决方案3】:

你可以git rebase -i HEAD^,然后在git-rebase打开的编辑器里把pick改成reword。在此之后,系统会提示您输入新的提交消息。

【讨论】:

  • 交互式变基对我来说不是选项,因为该命令必须在没有用户交互的情况下运行。
猜你喜欢
  • 2011-07-09
  • 2021-02-15
  • 1970-01-01
  • 2012-05-01
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 2015-07-25
相关资源
最近更新 更多