違いが見られない場合は、変更が失われた可能性があります。を使用git reflog
して、リベースの前に存在していたブランチを特定しgit reset --hard <my-branch-tip-before-rebase>
、元のブランチを取り戻すために使用できます。はい、もう一度プロセスを実行する必要があります。:-(
どうやって同じように見えるようになったのかよくわかりません。あなたが与えたコマンドで次のように表示されることを期待していました:
1 = 2 = 3 = 4 (master)
\ \
\ 5' = 6' = 8' (my_branch)
\
5 = 6 = 7
この場合、おそらく次を使用する必要がありましたrebase --onto
。
git rebase --onto master <commit id for 6> my_branch
これにより、次のようなグラフが表示されます。
1 = 2 = 3 = 4 (master)
\ \
\ 8' (my_branch)
\
5 = 6 = 7
変更が失われる限り、マージの競合に対処するには少し練習が必要です。特に、ほとんど同じに見える大きなブロックがいくつかある場合はそうです。私は常に、コミットによって導入された実際の差分を確認し、その変更を引き出して、適切な方法でブランチに既にあるものとマージしようとしています。あなたの変更がそこで失われた可能性があることは簡単にわかります。
覚えておくべきことが1つあります。大量のマージ競合が予想されない場合 (ソースが十分に分岐していないと感じているため)、競合が発生しているのは、何か間違ったことをしているという警告フラグです。を実行してバックアップし、git rebase --abort
ブランチを調査して、競合が予想されるかどうかを再度確認することをお勧めします。競合が発生した場所を必ずメモしておいてください (通常、リベースによってコマンド ラインに移動する直前に「適用中 ...」が表示されます)。通常は、ここから開始するのが最適です。
競合は避けられず、解決するのが面倒な場合があります。しかし、練習すれば、この問題に遭遇することは少なくなると思います。
ブランチ間で変更を移植する方法の詳細については、git rebaseの man ページを参照してください。「rebase --onto」で検索してください。最初のヒットで、別のブランチへの変更の移植について説明しているセクションにたどり着くはずです。