我想使用以下命令更改一个相当旧的提交消息:
git rebase -i sha1-of-commit^
这很好,我愿意git commit --amend
并编辑消息,但是当我这样做时事情会变得很糟糕:
git rebase --continue
我遇到了多个冲突,但不明白为什么,因为整个冲突解决方案显然已经在过去完成了,并且 git 应该继续前进,直到所有提交都重新确定基础。
如何快速完成变基而不需要处理这些旧冲突?毕竟我只是想更改一个简单的(和旧的)提交消息......
在你的目录中编写一个小脚本/bin
名为的目录(或路径中的任何目录)git-reword-commit
。 (你可以随意命名,只要名称以git-
。无论是否有合并提交,这都会起作用。
#! /bin/bash
REV=$1
MESSAGE=$2
FILTER="test $(echo '$GIT_COMMIT') = $(git rev-parse $REV) && echo $MESSAGE || cat"
git filter-branch --msg-filter "$FILTER" -- --all
要使用,执行
git reword-commit <commit> 'new message'
Warning:这将重写许多提交,因此适用于 rebase 的相同问题也适用于此处,即,您在推送时需要强制,其他用户必须了解这一点。
Git 将您的原始引用(来自过滤器分支之前)放入.git/refs/original
。您可以使用以下别名来撤消/确认任何过滤器分支命令。
git config alias.undo-filter-branch '! DIR=$(git rev-parse --git-dir); cp -r $DIR/refs/original/refs/ .git/; rm -r $DIR/refs/original/'
git config alias.confirm-filter-branch '! DIR=$(git rev-parse --git-dir); rm -r $DIR/refs/original/'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)