3

レポに次の履歴があるとします。

git log --oneline    
<3rd sha1> Third commit.
<2nd sha1> Second commit.
<1st sha1> First commit.

3 番目のコミットを最初のコミットに押しつぶして、2 番目のコミットをそのままにしておくにはどうすればよいですか?

4

1 に答える 1

10

私はこれをしました:

  1. 現在の変更を消去しました(隠しました)。
  2. git rebase -i HEAD~3.
  3. に編集:

    pick <2nd sha1> 2 番目のコミット。

    pick <1st sha1> 最初のコミット。

    squash <3rd sha1> 3 番目のコミット。

  4. 競合を解決しました: error: could not apply <2nd sha1>... Second commit.

  5. git rebase --continue.
  6. 2 番目のコミット メッセージでテキスト エディターが起動されたので、それを保持しました。
  7. 競合を解決しました: error: could not apply <1nd sha1>... First commit.
  8. git rebase --continue.
  9. 最初のコミット メッセージでテキスト エディターが起動したので、それを保持しました。
  10. 最初と 3 番目のコミットを破棄するためのコミット メッセージを要求するテキスト エディターが起動されたので、新しいメッセージ ( First commit (squashed).) を入力しました。

その後、それは行われました。

git log --oneline:

git log --oneline    
<2nd sha1> Second commit.
<1st sha1> First commit (squashed).

発生した競合は発生するはずであり、簡単に解決できました。

結果にはかなり満足していますが、これを達成するためのより良い方法があればとにかく知りたいです。

于 2013-03-19T15:04:53.280 に答える