您可以通过编程方式仅编辑最后一条提交消息:
git commit --amend -m 'xxxxxxx'
字符串
或者交互式随机提交:
git rebase -i HEAD~n
# Vim opens up, select the commit you want to modify, and change the word "pick" for "edit"
git commit --amend -m "Changing an old commit message!"
git rebase --continue
型
我想以编程方式合并一条消息,但要更改到之前的提交,而不仅仅是最后一次提交。
我想要修改的提交已经被推送到git服务器上,但是让其他人重新同步git项目并不是一个问题。
4条答案
按热度按时间nnt7mjpx1#
你不能简单地“修改”一个任意提交的原因是提交是不可变的。当你修改一个提交时,它实际上是用另一个提交替换当前提交,并将你的分支移动到新提交。带有旧消息、作者姓名等的提交仍然存在于历史中,直到你清理它:
字符串
型
为了模拟“修改”一个任意的提交,你不仅要重写那个提交,还要重写它之后的整个历史,因为一个提交包括它的父提交作为它不可变数据的一部分:
型
型
你可以通过在你感兴趣的提交上创建一个分支,修改它,并将原始提交到原始分支顶端的提交范围重新定基到新的分支上。下面是一个例子来展示你的目标:
型
型
型
型
型
这和交互式变基在你只修改一个提交时所做的差不多,顺便说一下,除了没有显式的临时分支。
tvokkenx2#
如果你只是更改了一些提交,使用
git rebase -i
和“reword”选项。例如.字符串
将
pick
切换到reword
,您将获得一个编辑器来重写提交消息。如果你需要对很多提交做同样的事情,使用
git filter-branch
和--msg-filter
。原始提交消息在stdin上,新提交消息在stdout上。这里有一个在当前分支的所有提交中将“color”改为“color”的方法。型
sd2nnvve3#
因为你想以编程的方式进行修改,交互式rebase(git rebase -i)不是一个选项。
无论出于何种原因,编辑一个旧的提交都会有效地将所有的提交都重新定基。如果你只修改提交消息,那么你就不需要担心合并冲突。
您创建一个新的临时分支,并将目标提交作为其HEAD,编辑提交消息,将旧的分支合并到新分支上,然后删除旧的临时分支。
在shell脚本中:
字符串
goucqfw64#
与重定基和强制推送修改后的分支不同,可以用不同的消息替换提交,而不会影响现有的提交哈希:
字符串
这也可以通过以下交互方式完成:
型
请注意,修改后的引用必须显式地通过以下命令进行推送和获取:
型