LoginSignup
0
0

競合なしでgitのコミットの順番を変更する(rebase -i, revert)

Posted at

目的

例えば、コミットが A→B→C となっている時、Bのコミットを修正したい。
そのやり方は、以下の2つがすぐに思いつく。

  1. Bの修正コミットB'を追加し(A→B→C→B')、
    B'をBの後ろに移動し(A→B→B'→C)、
    BとB'を結合する(A→B"→C)。
  2. rebase -i でB直後のコミットに移動し、直接Bを修正する。

競合が発生しない場合はこれでよいが、競合が発生する場合は面倒になる。(競合解消のため、ソースの差分を判断する。)
そこで、上記の方法では競合が発生するような場合でも、競合なしでコミットの順番を変更する方法を示す。
それには git revert を利用する。

方法

目的で示したものと同じ例を用いて示す。
すなわち、コミットが A→B→C となっている時、Bのコミットを修正する方法を以下に示す。
#ここで、C^はCのrevertを意味する。C^をrevertすることを再revertとする(C^^)が、これはCと同じである。

  1. rebase -i でC直後に移動し、revert, 再revertを行う。(A→B→C→C^→C→B')
  2. Bをrevertする。(A→B→C→C^→C→B'→B'^)
  3. B'→B'^ を C→C^ の間に移動する。(A→B→C→B'→B'^→C^→C)
  4. B→C→B' を結合(B")し、B'^→C^→C を結合(C")する。(A→B"→C")

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0