質問: Gitのブランチをコミット番号を変えずに付け替えたい場合はどうすれば良いでしょうか? (rebaseを用いると画像中のA,Bのコミットの番号が変わってしまうので、それを変えずに付け替える方法がありますでしょうか?) !Gitのブランチ付け替えでやりたいこと ※ 上記画像で、「A」「B」となっているものは、コミット番号を表します。 *追記* `git rebase branchA`で意図通りの付け替えが可能でした。 しかし、`git push -u origin branchA`ができません。 同じbranchAにpushしたい場合はどのようにすれば良いでしょうか? 複数の開発者がいるので、`-f`は行いたくないです。
回答: branchA で master に rebase すれば図の状態になります ``` git checkout branchA git rebase master ``` ただし、rebase 後のオレンジの2つのコミットは rebase 前のオレンジ2つのコミットとは親が異なるので完全に別のコミットです。git rebase の例にあるように ``` A---B---C topic / D---E---F---G master ``` を rebase した場合に作られる A', B', C' はA, B, C と同じような diff やメッセージを持つけれどもコミットとしては完全に別の物です。 ``` A'--B'--C' topic / D---E---F---G master ``` どんなコマンドを使ったとしても質問の図にあるように親が変わってしまっている以上、コミットとしては完全に別物なので branchA のオレンジのコミットの番号を維持するのは不可能です。 そのため、rebase 前の branchA の指すコミットと rebase 後の branchA の指すコミットは完全に別物で先祖・子孫の関係にないので `git push` でリモートレポジトリ上の branchA を 新しい branchA に fast-forward はできません。