python - 使用 gitpython 编辑提交

标签 python git gitpython

假设您在终端中,当前位于 git 存储库的根目录下。

如果你有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 这里,你会看到提交消息保持不变。如何使用此库编辑提交?

最佳答案

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

关于python - 使用 gitpython 编辑提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14329828/

相关文章:

git - 如何保存更改并退出 Vim?

git - 'git add --patch' 来包含新文件?

python - 使用 pandas 中现有数据框的 group 的简单组合创建 df

Python MySQL SELECT WHERE 带列表

python - 用最后一个非零值填充 1d numpy 数组的零值

Python Git 差异解析器

git - gitpython-检查分支是否未与 repo 对象 merge ?

python - 本地主机上的 Bokeh Web 服务器应用程序到 html 文件

Git:将文件的历史记录从一个存储库复制到另一个存储库

python - 如何使用 GitPython 将 master 分支 merge 到 feature 分支?