0

私の開発チームが git を使用してコミットする場合、新しい環境から実行することがあります。これが発生すると、git 構成が適切に設定されておらず、デフォルトの「root@localhost. localdomain」の作者名。これは、git ログに関して非常に厄介です。これはプロセスによって排除できますが、人的ミスは避けられない場合があります。

これらの間違った作成者名を変更する方法や、コミット前に正しい作成者名を適用する方法はありますか? たとえば、承認された作成者のリストを設定でき、作成者名を使用していない人はコミットできません。

4

1 に答える 1

0

このように git 履歴を書き換える際の問題は、1 つのコミットを変更すると、それに依存するすべてのコミットも変更されることです。つまり、変更しようとしているコミット ID の後にすべてのコミット ID を保持したい場合、変更したいコミットを変更することはできません。

変更しようとしているコミットの ID に続くコミットの ID を台無しにしても問題ない場合は、次のようなレシピを使用してコミットの詳細を変更できます。

git filter-branch -f --env-filter '
if [ $GIT_COMMIT = %COMMITID% ]
then
    export GIT_AUTHOR_DATE="YYYY-MM-DD hh:mm:ss z"
    export GIT_COMMITTER_DATE="YYYY-MM-DD hh:mm:ss z"
    export GIT_AUTHOR_NAME="Name"
    export GIT_AUTHOR_EMAIL="email@address"
    export GIT_COMMITTER_NAME="Name"
    export GIT_COMMITTER_EMAIL="email@address"
fi
' -- %COMMITID%~..HEAD

`%COMMITID% は、変更するコミットの ID に置き換えます。例:

git filter-branch -f --env-filter '
if [ $GIT_COMMIT = 1234567890ABCD ]
then
    export GIT_AUTHOR_DATE="2000-01-01 00:00:00 -0500"
    export GIT_COMMITTER_DATE="2000-01-01 00:00:00 -0500"
    export GIT_AUTHOR_NAME="Name"
    export GIT_AUTHOR_EMAIL="email@address"
    export GIT_COMMITTER_NAME="Name"
    export GIT_COMMITTER_EMAIL="email@address"
fi
' -- 1234567890ABCD~..HEAD

警告!繰り返しますが、そのコミットだけでなく、その上にあるすべてのコミットを変更しています。

  • 上記により、「邪悪な双子」「幽霊」「古い」コミットツリーがまだぶらぶらしているでしょう。次の方法でクリーンアップできます。

    git filter-branch -f --env-filter "" -- %COMMITID%~..HEAD

  • リモートブランチをプッシュするだけでは機能しないため、新しいコミットでリモートブランチを上書きする必要があります-リモートサーバーが文句を言います。「強制」するか、書き換えられたブランチをプッシュする前にリモート ブランチを削除します。

    git push remote_address_or_name :branch_name

例:

git push origin :feature_a
  • 他のすべてのチーム メンバーを新しいツリーの上にリベースする必要があります。git fetch --all -pそして、リベースする前に、リライトされたリモート ブランチのローカル ヒストリーをクレンジングするなどの作業が必要になる可能性があります。

上記に基づいて、問題のあるコミットを含むいくつかのサーバー側の pre-receiveフックを停止pushし、上記のfilter-branch魔法を使用して問題のあるメッセージをコミットから取り除く方法をチームメンバーに通知することをお勧めします。

于 2013-02-01T05:04:27.333 に答える