7

あなたがターミナルにいて、現在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ここにドロップすると、コミットメッセージは変更されないままになります。このライブラリでコミットを編集するにはどうすればよいですか?

4

1 に答える 1

6

gitcommitを編集することはできません。 それはの契約の一部ですgit

ただし、gitcommitを新しいものに置き換えることができます。それが何をするかgit commit --amendです:それは最後のコミットをさかのぼり、あなたが行った新しいものと変更を組み合わせ、そしてその組み合わせから真新しいコミットを作ります。git rebase歴史を「変える」と主張するものと同じこと。

したがって、ここでも同じことを行う必要があります。ブランチポインタを1つのコミットに戻し、同じツリーオブジェクトを再利用して、別のメッセージでコミットします。そのコミットを見た他の人を台無しにすることを覚えておいてください。公開された履歴を変更しないでください。

私はこのライブラリをまったく知りませんが、ドキュメントからの例のこの組み合わせはあなたが望むことをするかもしれません:

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「メモ」があります。しかし、それは明らかにあなたがここで意味していることではありません、そして私はまだ誰かが実際にそれらを使用しているのを見たことがありません。

于 2013-01-15T02:33:20.910 に答える