68

私のローカル リポジトリには、コミット メッセージが正しくないコミットが 1 つあります。

で間違ったコミット メッセージを既に公開していますgit push

現在、リモート リポジトリ (GitHub でホストされている) にも間違ったコミット メッセージがあります。

私はすでに を試しgit commit --amendましたが、間違ったコミット以降に追加のコミットを行ったため、この状況ではうまくいかないことがわかりました。

この状況をどのように修正しますか?

4

4 に答える 4

100

最も簡単な解決策(ただし、これを行う前にこの回答全体を読んでください):

  1. git rebase -i <hash-of-commit-preceding-the-incorrect-one>
  2. 開いたエディターで、間違ったコミットの行に変更pickします。reword
  3. ファイルを保存して、エディターを閉じます。
  4. エディターが再び開き、誤ったコミットメッセージが表示されます。修理する。
  5. ファイルを保存して、エディターを閉じます。
  6. git push --forceGitHubを更新します。

これは、以前に公開されたリポジトリの変更バージョンを公開することを意味します。間違ったコミットメッセージを間違えたときと修正したときの間に誰かがリポジトリからプルまたはフェッチした場合、後でいくつかの問題が発生します。したがって、これを試す前に、この結果を受け入れることができることを確認してください。

于 2011-02-17T17:50:47.437 に答える
35

1 つのコミットでリベース ルート全体を使用するのではなく、次のようにします。

git reset --soft head~
git commit -m "The message you wanted to use"
git push -f

オプションはgit-resetマンページで確認できます。

あなただけが取り組んでいるプロジェクトの場合、変更された履歴は問題になりません。

于 2011-02-17T18:03:59.487 に答える
6

複数のブランチで古いコミット メッセージを変更する必要がある場合 (つまり、誤ったメッセージを含むコミットが複数のブランチに存在する場合)、使用したい場合があります。

git filter-branch -f --msg-filter 'sed "s/<old message>/<new message>/g"' -- --all

コミットメッセージを置き換えます。

Git は書き換え用の一時ディレクトリを作成し、さらに古い参照を refs/original/ にバックアップします。

-f操作の実行を強制します。これは、一時ディレクトリが既に存在する場合、またはrefs/originalに格納されている参照が既に存在する場合に必要です。そうでない場合は、このフラグを削除できます。

--フィルター分岐オプションをリビジョン オプションから分離します

--allすべてのブランチタグが書き換えられることを確認します。

古い参照のバックアップにより、コマンドを実行する前の状態に簡単に戻ることができます。

たとえば、マスターを復元してブランチ old_master でアクセスしたいとします。

git checkout -b old_master refs/original/refs/heads/master

変更に満足したら、 git push -f を使用して変更をパブリック リポジトリにプッシュします。

最初に変更されたものから始まるコミットのすべてのハッシュが変更されているため、これについて共同作業者に通知する必要があることに注意してください。

于 2012-11-15T09:46:17.763 に答える
2

コードをリモート ブランチ (Github/Bitbucket) にプッシュしていない場合は、以下のようにコマンド ラインでコミット メッセージを変更できます。

 git commit --amend -m "Your new message"

特定のブランチで作業している場合は、これを行います。

git commit --amend -m "BRANCH-NAME: new message"

すでに間違ったメッセージでコードをプッシュしている場合は、メッセージを変更するときに注意する必要があります。つまり、コミット メッセージを変更して再度プッシュしようとすると、問題が発生します。スムーズにするには、次の手順に従います。 実行する前に回答全体をお読みください

git commit --amend -m "BRANCH-NAME : your new message"

git push -f origin BRANCH-NAME                # Not a best practice. Read below why?

重要な注意:強制プッシュを直接使用すると、他の開発者が同じブランチで作業しているというコードの問題が発生する可能性があります。したがって、その競合を回避するには、強制プッシュを行う前にブランチからコードをプルする必要があります

 git commit --amend -m "BRANCH-NAME : your new message"
 git pull origin BRANCH-NAME
 git push -f origin BRANCH-NAME

これは、コミット メッセージが既にプッシュされている場合に変更する場合のベスト プラクティスです。

于 2015-01-13T07:08:36.537 に答える