LoginSignup
9
9

More than 5 years have passed since last update.

git rebase -iしない

Last updated at Posted at 2014-12-18

Gitで過去のコミットを改変する際にはgit rebase -iを用いるのが一般的ですが、私はささいな変更のとき以外は使いません。git rebase -iを使うと、--continueしてconflictが多発したときに、よくわからなくなって--abortしたくなるからです。

私が過去のコミットを改変するときは、まずそのコミットからブランチを作ります。たとえば、以下の履歴でBを改変するときは、まずgit checkout -b rebase/b Bとしてブランチを作ります。

A-B-C-D-E develop
rebase/b
  ↓
A-B-C-D-E develop

Bを修正してgit add; git commit --amendします。

  B' rebase/b
 /
A-B-C-D-E develop

次に、B'にC-D-Eをつなげていきます。conflictしそうにないときは、git rebase --onto rebase/b B developで一気につなげます。

A-B'-C'-D'-E' rebase/b develop

rebase中によくわからなくなりそうなときは、cherry-pickで一つずつつなげます。git cherry-pick Cすると以下のようになります。conflictしたら直してください。

A-B'-C' rebase/b
\
 B-C-D-E develop

続いてgit cherry-pick Dします。

A-B'-C'-D' rebase/b
\
 B-C-D-E develop

残りはEだけなのでrebaseします。git rebase --onto rebase/B D developとすると以下のようになります。これで完成です。

A-B'-C'-D'-E' rebase/b develop

そもそも、rebase中によくわからなくなりそうなほど、古いコミットを大きく書き換えるのが悪いのですが、そういうときでもこの手順ならうまく処理できると思います。

9
9
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
9
9