gpt4 book ai didi

git - 如何以编程方式编辑旧的 git 提交消息?

转载 作者:太空狗 更新时间:2023-10-29 13:07:58 26 4
gpt4 key购买 nike

您只能以编程方式编辑最后的提交消息:

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 项目不是问题。

最佳答案

您不能简单地“修改”任意提交的原因是提交是不可变的。当您修改提交时,它实际上会用另一个提交替换当前提交并将您的分支移动到新提交。带有旧消息、作者姓名等的提交仍然存在于历史记录中,直到您清理它:

Before:

master
|
v
A -- B -- C

After:

master
|
v
A -- B -- C'
\
\- C

要模拟“修改”任意提交,您不仅要重写该提交,还要重写它之后的整个历史,因为提交包括其父项作为其不可变数据的一部分:

Before:

master
|
v
A -- B -- C

After:

master
|
v
A -- B' -- C'
\
\- B --- C

您可以通过在您感兴趣的提交上创建一个分支,对其进行修改,然后将原始分支之后的提交范围重新定位到新分支上来实现这一点。这是一个显示您所追求的示例:

Start:

master
|
v
A -- B -- C -- D

New Branch:

master
|
v
A -- B -- C -- D
^
|
temp

Amend:

master
|
v
A -- B -- C -- D
\
\- B'
^
|
temp

Rebase:

A -- B -- C -- D
\
\- B' -- C' -- D'
^ ^
| |
temp master

Cleanup:

A -- B -- C -- D
\
\- B' -- C' -- D'
^
|
master

顺便说一下,这几乎就是当您只修改单个提交时交互式 rebase 所做的,除非没有明确的临时分支。

关于git - 如何以编程方式编辑旧的 git 提交消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50632722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com