使用gitpython编辑提交

时间:2013-01-15 01:34:51

标签: python git gitpython

让我们说你在终端,目前坐在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,您将看到提交消息保持不变。如何使用此库编辑提交?

1 个答案:

答案 0 :(得分:7)

您无法编辑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”可以独立于它们附加的提交进行编辑。但这显然不是你在这里的意思,而且我还没有看到任何人实际使用它们。