無為空間
むいむい(´ω`*)
Entries
Alice: リポジトリを作る。
alice$ git init alice$ echo A > alice.txt # 適当にファイルを作ってコミット alice$ git add alice.txt alice$ git commit -m "alice's commit A" alice$ echo B >> alice.txt # 適当に変更を加えてコミット alice$ git commit -a -m "alice's commit B"

Alice: aliceリポジトリのバンドルファイルを作成し、Bobに送る。
alice$ git bundle create ../alice.bundle HEAD alice$ git branch bob # バンドルファイルを作ったリビジョンにブランチを作っておく
Bob: 受け取ったバンドルファイルをcloneしてbobリポジトリを作る。
bob$ git clone alice.bundle bob bob$ cd bob bob$ git checkout -b master # masterブランチを用意 bob$ git branch alice # alice.bundleの先端にブランチを作っておく

Bob: bobリポジトリにコミットを追加する。
bob$ echo A > bob.txt bob$ git add bob.txt bob$ git commit -m "bob's commit A" bob$ echo B >> bob.txt bob$ git commit -a -m "bob's commit B"

Bob: alice.bundleの先端からの差分バンドルファイルを作成してAliceに送る。
bob$ git bundle create ../bob.bundle alice..HEAD
Alice: AliceはAliceでaliceリポジトリにコミットを追加している。
alice$ echo C >> alice.txt alice$ git commit -a -m "alice's commit C" alice$ echo D >> alice.txt alice$ git commit -a -m "alice's commit D"

Alice: Bobから受け取ったバンドルファイルをbobブランチにpullする。
alice$ git remote add bob ../bob.bundle alice$ git checkout bob alice$ git pull bob HEAD

Alice: masterブランチにbobの変更を取り込む。
alice$ git checkout master alice$ git merge bob

Alice: bob.bundleの先端からの差分バンドルファイルを作成してBobに送る。
alice$ git bundle create ../alice.bundle bob..HEAD
Bob: Aliceから受け取った差分バンドルファイルをaliceブランチにpullする。
bob$ git checkout alice bob$ git pull origin HEAD

Bob: masterブランチにaliceの変更を取り込み、作業を再開する。
bob$ git checkout master bob$ git merge alice

TortoiseGit 1.6.5(with msysGit 1.7.4)の使い勝手を調べていたときのお話。

この状態から

piyoブランチをmasterブランチのHEADにrebaseしようとしたら

「add piyo.txt」のコミットが消えた。
rebaseの使い方を誤ったのだろうか?
いずれにせよ、このおかしな歴史は元に戻さなければならない。
shift+コンテクストメニューでReflogを出す。


何か表示がおかしい気がするが……

Refを指定したらすっきりした。

piyo{1}を選び、「add piyo.txt」の頃にresetする。
これで無事、rebaseする前の状態に戻ることができた。
さて、この「rebaseするとコミットが消える」現象。
TortoiseGitのIssuesの方にも「時々起こる問題」として何件か上がっているが、最終的には「Issue 512: Git sync lose local commits (remote update, fetch and rebase)」にて
The issue always occurred on single-core machines, or when manually setup affinity mask of TortoiceProc to one core.
「シングルコアのマシンなら確実に起こる」というコメントと共にパッチが上げられていた。
シングルコアとは、なるほど今時のマシンでは発症しにくそうな不具合である。
では、このパッチを適用したバイナリを入れて再度rebaseしてみよう。


今度は期待通りの歴史になることが確認された。