7

假设您在终端中,当前位于 git repo 的根目录中。

如果你已经安装了GitPython,你可以这样做来获取最后提交的提交,或者更确切地说,是 HEAD 指向的提交:

>>> import git
>>> r = git.Repo('.')
>>> c = r.head.commit
>>> c
<git.Commit "62e71e8210d0d0275b1f5845bf3033a7bfa3ed73">
>>> c.message
u'old message'
>>> c.message = "new message"
>>> c.message
'new message'

但是如果你退出 python 并进入git log这里,你会看到提交消息保持不变。如何使用此库编辑提交?

4

1 回答 1

6

你不能编辑 git 提交。 这是合同的一部分git

不过,您可以用新的提交替换 git 提交。就是这样git commit --amend做的:它回溯上次提交,将更改与您所做的新更改结合起来,然后从组合中进行全新的提交。与git rebase声称“改变”历史的任何其他事物相同。

所以你必须在这里做同样的事情:将分支指针移回一个提交,重用相同的树对象,并使用不同的消息提交它。请记住,您会搞砸任何看到该提交的人;永远不要更改已发布的历史记录。

我根本不知道这个库,但是文档中的示例组合可能会满足您的需求:

branch = r.head.reference
commit = r.head.commit
branch.commit = commit.parents[0]
# This works because the index is unchanged by the `branch.commit`
# edit, but it won't work if you're trying to change a commit on
# another branch -- you can't really do that
new_commit = repo.index.commit(u"new message")

新提交将具有不同的哈希,但应包含相同的更改并具有新消息。 仔细做这件事,我的粗体字很重要,改变历史是一项不平凡的操作,你应该明白你在做什么。


* 好吧,有 git "notes" 可以独立于它们所附加的提交进行编辑。但这显然不是你在这里的意思,而且我还没有看到有人真正使用它们。

于 2013-01-15T02:33:20.910 回答