- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

git

はじめに Edit

ブランチの親(派生元)を変える git rebaseコマンドをやり直す方法について。

Edit

git rebaseの有効性は何故つかうか?は『Pro Git - Pro Git 3.6 Git のブランチ機能 リベース』 や ../git-rebase を見ていただくとしまして…。

さて、例えばmasterに修正を加えているオレオレ・カスタマイズ済みなmy_customブランチがあるとします。
このたびmasterが新しく更新されたので、my_customもmasterの変更に追従したいなと思いました。

そこで、git rebaseを使いmy_customをかつてのmasterからブランチを切った起点ではなく、あたらしく更新された今のmasterを起点に切り替えたいとします。(つまり、新しいmasterにmy_custom独自の差分パッチを再度当てた状態にしたい)

ということで、

$ git checkout my_other_custom
$ git rebase master

ああ、しまった!間違って my_other_custom ブランチをrebaseしてしまいました!!!(実はこんなブランチも作っていたんです。しかも重要なんです、このブランチ)

以下のように両方共ブランチを直接指定していたらこんな失敗にはならなかったのに…。

$ git rebase master my_custom

さて、こんな時はどうすれば?

修正方法 Edit

../git mergeを元に戻す方法と同じよう内容になってしまっていますが…。

rebase直後の場合は、

$ git reset --hard ORIG_HEAD

でOK。ORIG_HEADで前のHEADを参照るのがポイントか。

かならずうまく行っているかgitk --allやらgit log --allやらで確認して下さい。

また、reflogして過去の変更履歴を見つつ reset --hard でHEAD@{数値}で以下のように指定する方法もあります。例えば前にrebaseした一つ前に戻してみる。

$ git reflog
1i1i1i1 HEAD@{0}: nantokakanntoka
e009ea5 HEAD@{1}: rebase: other feature2!!
ea67a3d HEAD@{2}: rebase: added other feature 
b700438 HEAD@{3}: checkout: moving from my_other_custom # ここがrebase開始ぽいので一つ前に戻す↓
b700438 HEAD@{4}: hogemage
$ git reset --hard HEAD@{4}

参考リンク Edit


Show recent 10 comments. Go to the comment page.

  • 助かった。 -- niiyz? 2014-11-29 (Sat) 09:08:32
  • おいらも助かった。 -- Nazka? 2015-03-17 (Tue) 14:58:35
  • 同じく -- 2015-07-22 (Wed) 15:13:22
Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2010-07-30 Fri 00:55:02 JST (2467d)