181

here で説明されているように、古いコミットメッセージを編集しようとしていました。

問題は、今、実行しようとすると、と表示されるrebase -i HEAD~5ことinteractive rebase already startedです。

だから私は試してみます:git rebase --continueしかし、このエラーが発生しました:

error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba
fatal: Cannot lock the ref 'refs/heads/master'.

何か案は?

4

5 に答える 5

164

それは言う:

エディターを保存して終了すると、リスト内の最後のコミットに巻き戻され、次のメッセージが表示されてコマンドラインにドロップします。

$ git rebase -i HEAD~3
Stopped at 7482e0d... updated the gemspec to hopefully work better
You can amend the commit now, with

そんな意味じゃない:

もう一度入力してください git rebase -i HEAD~3

エディターを終了するときに入力 しないgit rebase -i HEAD~3ようにしてください。正常に機能するはずです。
(そうでない場合、特定の状況では、git rebase -i --abortすべてをリセットして再試行できるようにするためにが必要になる場合があります)


Dave Vogtがコメントで述べているように、最初のコミットを修正した後git rebase --continue、リベースプロセスの次のタスクに進むためのものです。

また、グレッグ・リンドは彼の答えの中で次のrewordコマンドにgit rebase言及しています:

コマンド「pick」をコマンド「edit」に置き換えることgit rebaseで、そのコミットを適用した後に停止するように指示できます。これにより、ファイルやコミットメッセージを編集し、コミットを修正して、リベースを続行できます。

コミットのコミットメッセージを編集するだけの場合は、 pickrewordGit1.6.6(2010年1月)以降、コマンド""をコマンド" "に置き換えます。

インタラクティブなリベース中に「<code>edit」が行うのと同じことを行いますが、シェルに制御を戻さずにコミットメッセージを編集することしかできません。これは非常に便利です。
現在、コミットメッセージをクリーンアップする場合は、次のことを行う必要があります。

$ git rebase -i next

次に、すべてのコミットを「編集」に設定します。次に、それぞれに:

# Change the message in your editor.
$ git commit --amend
$ git rebase --continue

'<code>edit'の代わりに'<code>reword'を使用すると、git-commitとのgit-rebase呼び出しをスキップできます。

于 2009-12-10T22:37:52.750 に答える
61

FWIW、git rebase interactive にrewordオプションが追加されたので、これで痛みが大幅に軽減されました!

于 2010-07-26T15:42:57.460 に答える