Togetter/min.tを安心してお使い頂くためのガイドラインを公開しました。

git rebase時に、rebase前のコミットについていたtagはどうなる

@bleis さんによる解説
0
Hidenori Goto @hidenorigoto

あれ、rebaseするとコミットに関連付けていたタグは消えちゃうんでしたっけ・・・。

2011-01-29 23:20:06
ふ''れいす @bleis

gitkを使っているのであれば、--allすれば見えるとかそういう

2011-01-29 23:21:15
Hidenori Goto @hidenorigoto

@bleis ありがとうございます。自分の理解不足ですw http://bit.ly/ijXpCl 履歴をさかのぼってコミットを1個追加して、masterへ戻って追加したコミットへリベース、みたいな操作をしたので、新しいコミットが作られたということでいいんでしょうか。

2011-01-29 23:29:13
ふ''れいす @bleis

@hidenorigoto そんな感じです。tagはcommitオブジェクトのハッシュを指すだけのものなので、rebaseした際に新しいcommitオブジェクトが作られてもそのままになる、とそんな感じ

2011-01-29 23:31:29
ふ''れいす @bleis

@hidenorigoto 4-29が指してるcommitオブジェクトには、親のcommitオブジェクトのハッシュが記録されていて、4-29-preのコミットを指しこんだことで、4-29が指してるcommitオブジェクトとは別のcommitオブジェクトが必要になった(続

2011-01-29 23:33:57
ふ''れいす @bleis

@hidenorigoto なんでかというと、Gitではcommitオブジェクトは一回作られたらその内容が変更されないから。変更できているように見えるのは、単に新しいcommitオブジェクトが作られて、そちらを指すようになるからです。(続

2011-01-29 23:34:45
ふ''れいす @bleis

@hidenorigoto で、今回みたいにtagとか打ってあると、そのtag自体は前のcommitオブジェクトを指したままになるので、gitkすると消えたように感じる、と

2011-01-29 23:35:31
ふ''れいす @bleis

・・・というような感じの話を名古屋Ruby会議02ではしようと思ってます

2011-01-29 23:37:00
Hidenori Goto @hidenorigoto

@bleis なるほど、丁寧にありがとうございます。ということは、こういった書き換えを行う場合はtagを付け直す必要があるということですね。

2011-01-29 23:39:04

コメント

コメントがまだありません。感想を最初に伝えてみませんか?