回答:
SourceTree for Windowsバージョン1.5.2.0を使用して、以前のコミット(最新のコミットではない)のコミットメッセージを編集する手順は次のとおりです。
編集するコミットの直前のコミットを選択します。たとえば、メッセージ「FOOBAR!」でコミットを編集したい場合は、次に、その直前に来るコミットを選択する必要があります。
選択したコミットを右クリックして、次をクリックしますRebase children...interactively
。
編集するコミットを選択Edit Message
して、下部にあるをクリックします。この場合、メッセージ「FOOBAR!」でコミットを選択しています。
コミットメッセージを編集して、をクリックしますOK
。私の例では、「SHAZBOT!SKADOOSH!」を追加しました。
インタラクティブなリベースウィンドウに戻ったら、をクリックしOK
てリベースを終了します。
この時点で、すでにプッシュしたコミットをリベースしたので、新しい変更を強制的にプッシュする必要があります。ただし、SourceTree for Windowsの現在の1.5.2.0バージョンでは、GUIを強制的にプッシュすることができないため、それを行うには、コマンドラインからGitを使用する必要があります。
Terminal
GUIをクリックしてターミナルを開きます。
端末から次のコマンドを使用してforce-pushを実行します。
git push origin <branch> -f
どこ<branch>
あなたがプッシュしたいというブランチの名前であり、-f
手段はプッシュを強制します。強制プッシュはリモートリポジトリのコミットを上書きしますが、他の人とリポジトリを共有していないと言ったので、これは問題ありません。
それでおしまい!完了です!
コメントメッセージに英語以外の文字が含まれている場合、user456814が提供する方法を使用すると、それらの文字は疑問符に置き換えられます。(sourcetree Ver2.5.5.0でテスト済み)
だから私は次の方法を使わなければなりません。
注意:コミットが他のメンバーによってプルされた場合、以下の変更によりメンバーに混乱が生じる可能性があります。
ステップ1:sourcetreeのメインウィンドウで、repoタブを見つけ、「terminal」ボタンをクリックしてgitコマンドコンソールを開きます。
Step2:
[状況A]:ターゲットコミットが最新のものです。
1) gitコマンドコンソールで、
git commit --amend -m "new comment message"
2)ターゲットコミットがリモートにプッシュされている場合は、強制的に再度プッシュする必要があります。gitコマンドコンソールで、
git push --force
[状況B]:ターゲットコミットが最新のものではありません。
1) gitコマンドコンソールで、
git rebase -i HEAD~n
最新のn個のコミットを押しつぶすことです。たとえば、最後のメッセージの前のメッセージを編集する場合、nは2です。このコマンドはviウィンドウを開き、各行の最初の単語は「pick」で、行の「pick」を「reword」に変更します編集したい。次に、:wq
そのviウィンドウを保存して終了するための入力を行います。これで、新しいviウィンドウが開きます。このウィンドウで、新しいメッセージを入力します。:wq
保存して終了するためにも使用します。
2)ターゲットコミットがリモートにプッシュされている場合は、強制的に再度プッシュする必要があります。gitコマンドコンソールで、
git push --force
最後に:sourcetreeのメインウィンドウで、を押しF5
て更新します。
注:この回答は、もともとSourceTree for Windowsの古いバージョンに関して書かれており、現在は古くなっています。
私の新しい答えを参照してください Windowsの、のためにSourceTreeの現行バージョンの1.5.2.0。この答えは歴史的な目的のために残しておきます。
私はWindowsを使用しているので、コマンドラインツールを持っていないし、その使用方法もわかりません:(それがそれを整理する唯一の方法ですか?GUIはすべてのgitの機能をカバーしていませんか?— オリジナルポスター
Git GUIに関しては、いいえ。Gitのすべての機能を網羅しているわけではありません。彼らも近づかない。Gitで誤ったコミットメッセージを編集するにはどうすればよいですか?の回答の1つを確認することをお勧めします。、Gitは柔軟性が高いため、コマンドラインから複数のソリューションを使用できます。
SourceTreeは、実際にはmsysgit bashシェルがすでに付属しているか、標準のWindowsコマンドシェルを使用できる場合があります。どちらの方法でも、[ターミナル]ボタンをクリックしてSourceTreeから開きます。
SourceTreeが使用するターミナル(bashまたはWindows)をここで設定します。
そうは言っても、SourceTreeでこれを行う方法の1つを次に示します。コメントで「障害のあるコミットに戻す」ことは気にしないと述べたので(これは、実際にはリセットすることを意味していると思いますが、これはGitの別の操作です)、手順は次のとおりです。
Reset current branch to this commit
し、ドロップダウンからハードリセットオプションを選択することにより、SourceTreeでハードリセットを不良コミットに実行します。すでにBitbucketにプッシュされているためにそれが不可能な場合は、新しいリポジトリを作成してやり直してもかまいません。
これは、あなただけがリポジトリで作業しているということですか?共同作業者に問題を引き起こさずに(コミットを修正するなどして)リポジトリの履歴を変更することは簡単ではないため、これは重要です。ただし、自分がリポジトリで作業している唯一の人だとすると、次に行うことは、変更した履歴をリモートに強制的にプッシュすることです。
ただし、誤ったコミットにハードリセットを行ったため、強制プッシュを行うと、それ以降に発生したすべての作業が失われることに注意してください。それが問題ない場合は、コマンドラインで次のコマンドを使用して強制プッシュを実行する必要がある場合があります。これは、SourceTreeで実行するオプションが見つからなかったためです。
git push remote-repo head -f
これは、BitBucketを使用してリポジトリへのプッシュを強制できることも前提としています。
とにかく、コマンドラインからGitを使用する方法を本当に学ぶ必要があります。これにより、Gitに習熟することができます。#ProTip、msysgitを使用し、ターミナルのプロパティでクイック編集モードをオンにします。これにより、ダブルクリックしてテキスト行を強調表示し、右クリックしてコピーし、もう一度右クリックして貼り付けることができます。それはかなり速いです。