1. ホーム
  2. ギット

[解決済み] Gitです。リベース中に "Cannot 'squash' without a previous commit" エラー発生

2022-03-11 02:33:51

質問

のToDoテキストに次のようなものがあります。 git rebase -i HEAD~2 :

pick 56bcce7 Closes #2774
pick e43ceba Lint.py: Replace deprecated link

# Rebase 684f917..e43ceba onto 684f917 (2 command(s))
#
...

さて、最初のものをつぶそうとすると( 56bcce7 を追加して、2番目のものを選ぶと、次のようなエラーが発生します。

Cannot 'squash' without a previous commit

どなたか、その意味と方法を説明していただけませんか?

最初のコミットを潰したい( 56bcce7 ) と、2 番目の ( e43ceba )コミット

解決方法は?

インタラクティブなリベースでは、コミットの順番が git log . git rebase -i は、選択されたコミットを、保存されたリベース指示ファイルに記載されているのと全く同じ (上から下への) 順序で再生します。スクワッシュする場合、スクワッシュするために選択されたコミットは、(編集された)リストでその前にあるコミット、つまり、前の行のコミットと結合されます。あなたの場合 - 前のコミットは 56bcce7 . 次のいずれかを実行する必要があります。

  • git rebase -i HEAD~3 (潰したい場合 56bcce7684f917 )
  • を組み合わせる場合 56bcce7e43ceba であり、かつ e43ceba には依存しません。 56bcce7 であれば、単純に並べ替えればよい。

    r e43ceba Lint.py: Replace deprecated link
    s 56bcce7 Closes #2774
    
    

    アップデイト : ガスの回答 では、2つのコミットを並べ替えることなく、同じことを行うより良い方法を提案しています。

    r 56bcce7 Closes #2774
    s e43ceba Lint.py: Replace deprecated link
    
    

    これで、2つのコミットが1つにつぶされ、マージされます。対話型リベースで、コミットメッセージを言い換えた 56bcce7 の結合を記述したコミットメッセージを提供します。 56bcce7e43ceba .