git rebase は中間コミットを変更します

0. 序文

現在、最新バージョンの kfence 機能を移植する場合、合計 40 以上のパッチを移植する必要がありますが、多くのパッチには競合があり、マージする前に手動で修正する必要があります。すべてのパッチをマージしてコンパイルしたところ、パッチの 1 つを手動でマージする際にエラーがあることが判明しました。

合計 40 個のパッチがあり、1 から 40 までの番号が付けられているとします。問題は、20 番目のパッチを変更する必要があり、21 から 40 のパッチには多くの手動による変更が必要であることです。20 番目のパッチを迅速かつ効果的に変更するにはどうすればよいでしょうか。リセット?パッチはどうですか?

これは、この記事で説明する必要があるgit rebaseコマンドです。

1. git rebase -i HEAD~n

まずオプション -i を見てみましょう。

-i
--interactive
Make a list of the commits which are about to be rebased. Let the user edit that list before rebasing. This mode can also be used to split commits (see SPLITTING COMMITS below).

The commit list format can be changed by setting the configuration option rebase.instructionFormat. A customized instruction format will automatically have the long commit hash prepended to the format.

See also INCOMPATIBLE OPTIONS below.

このオプションを使用すると、リベースするコミット リストが生成され、ユーザーはリベース前に対話モードに入ることができます。

HEAD~n は、HEAD から始まるカウントダウン n コミットリストをリストします。たとえば、n = 4 の場合:

 git rebase -i HEAD~4コマンドを実行すると、HEAD から始まる最後の 4 つのコミット リストが表示され、最後のものが HEAD コミットになります。

最初のコミット行、つまり下から 4 番目のコミットのコマンドが pick から edit に変更されると、コードのリベースはこのコミットで停止し、修正処理が行われます。

変更を保存してインタラクションを終了すると、下から 4 番目のコミットが停止状態になり、修正を待機していることがわかります。

残りは簡単です:

  • コードを変更します。
  • git add
  • git commit --amend
  • git rebase --Continue

2. インタラクション中のコマンド

対話型ウィンドウでは、前述の編集コマンドに加えて、この記事では他のコマンドも追加します。

  • p/ピック、コミットを維持します。
  • r/reword、コミットは保持しますが、コミットメッセージを変更する必要があります。
  • e/edit、コミットを維持しますが、停止して修正を待つ必要があります。
  • s/squash、コミットは保持しますが、そのコミットを前のコミットにマージします。
  • f/fixupは squash に似ていますが、コミット メッセージは保持されません。
  • x/exec は、シェルでコマンドを実行することと同等です。
  • d/drop、コミットを破棄します。

公式ドキュメント:

https://git-scm.com/docs/git-rebase/

おすすめ

転載: blog.csdn.net/jingerppp/article/details/133138361