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'.
何か案は?
それは言います:
エディターを保存して終了すると、そのリストの最後のコミットに巻き戻され、コマンドラインに次のメッセージが表示されます。
$ 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
notを終了するときにgit rebase -i HEAD~3
と入力すると、正常に動作するはずです。
(それ以外の場合、特定の状況では、すべてをリセットして再試行できるようにするためにgit rebase -i --abort
が必要になる場合があります)
Dave Vogt がコメントで言及しているように、git rebase --continue
はリベースプロセスの次のタスクに進むため、最初のコミットを修正した後。
また、 Gregg Lind は his answer でreword
コマンドの git rebase
:
コマンド "pick"をコマンド "edit"に置き換えることにより、
git rebase
にそのコミットの適用後に停止するように指示できるため、ファイルやコミットメッセージを編集し、コミットを修正し、リベースを続行できます。コミットのコミットメッセージを編集する場合は、コマンド「
pick
」をコマンド「reword
」に置き換えます。なぜなら、 Git1.6.6(2010年1月) 。インタラクティブなリベース中に「
edit
」が行うことと同じことを行いますが、では、シェルに制御を戻すことなくコミットメッセージを編集することしかできません。これは非常に便利です。
現在、コミットメッセージをクリーンアップする場合は、以下を行う必要があります。
$ git rebase -i next
次に、すべてのコミットを「編集」に設定します。次に、それぞれについて:
# Change the message in your editor.
$ git commit --amend
$ git rebase --continue
「
reword
」の代わりに「edit
」を使用すると、git-commit
およびgit-rebase
の呼び出しをスキップできます。
FWIW、git rebase interactiveには "reword"オプションがあり、これにより痛みが軽減されました!
Gregg Lindが示唆したように、rewordを使用して、コミットメッセージのみを変更するように求められます(そうでない場合はコミットをそのまま残します)。
git rebase -i HEAD~n
ここで、n
は最後のn個のコミットのリストです。
たとえば、git rebase -i HEAD~4
を使用すると、次のように表示されます。
pick e459d80 Do xyz
pick 0459045 Do something
pick 90fdeab Do something else
pick facecaf Do abc
メッセージを編集するコミットのpickをrewordに置き換えますの:
pick e459d80 Do xyz
reword 0459045 Do something
reword 90fdeab Do something else
pick facecaf Do abc
ファイルを保存してからエディターを終了すると、rewordとマークしたコミットのメッセージをメッセージごとに編集するように求められます。 pick
をreword
に置き換えたときにコミットメッセージを編集する方がはるかに簡単でしたが、それを行っても効果はありません。
詳細については、GitHubのページで コミットメッセージの変更 をご覧ください。
このために別のオプションを提供したかっただけです。私の場合、私は通常、個々のブランチで作業してからマスターにマージし、ローカルに行った個々のコミットはそれほど重要ではありません。
Jiraで適切なチケット番号をチェックするが、大文字と小文字を区別するgitフックのため、コードをプッシュできませんでした。また、コミットはかなり前に行われたので、リベースに戻るコミットの数をカウントしたくありませんでした。
それで、私がしたことは、最新のマスターから新しいブランチを作成し、問題のあるブランチからのすべてのコミットを新しいブランチの単一のコミットに押しつぶすことでした。私にとっては簡単だったので、今後の参考としてここに置いておくことをお勧めします。
最新のマスターから:
git checkout -b new-branch
それから
git checkout new-branch
git merge --squash problem-branch
git commit -m "new message"
考えられるすべてのケースをカバーする非常に素晴らしい要点は次のとおりです。 https://Gist.github.com/nepsilon/156387acf9e1e72d48fa35c4fabef0b4
概要:
git rebase -i HEAD~X
# X is the number of commits to go back
# Move to the line of your commit, change pick into edit,
# then change your commit message:
git commit --amend
# Finish the rebase with:
git rebase --continue