3179


Gitのブランチをコミット番号を変えずに付け替えたい場合はどうすれば良いでしょうか？  
（rebaseを用いると画像中のA,Bのコミットの番号が変わってしまうので、それを変えずに付け替える方法がありますでしょうか？）

![Gitのブランチ付け替えでやりたいこと](https://i.stack.imgur.com/HKUs9.png)

※ 上記画像で、「A」「B」となっているものは、コミット番号を表します。

_追記_

`git rebase branchA`で意図通りの付け替えが可能でした。  
しかし、`git push -u origin branchA`ができません。

同じbranchAにpushしたい場合はどのようにすれば良いでしょうか？  
複数の開発者がいるので、`-f`は行いたくないです。


CC BY-SA 3.0
2015-01-06T06:19:33.087
3168
2016-05-20T13:13:20.420
2015-01-06T07:37:35.990
3355
3355
question
git
Gitでブランチを付け替えるにはどうしたらよいでしょうか？


rebaseで問題ありません。  
ABが変更されるということは、masterブランチ上でbranchAにrebaseしています。  
現在のブランチをbranchAに変更後、git rebase masterを行って下さい。

[code]

    git checkout branchA
    git rebase master
    
[/code]


CC BY-SA 3.0
2015-01-06T07:21:00.320
3176
2015-01-06T07:21:00.320
5915
3168
answer


branchA で master に rebase すれば図の状態になります

[code]

    git checkout branchA
    git rebase master
    
[/code]

ただし、rebase 後のオレンジの2つのコミットは rebase 前のオレンジ2つのコミットとは親が異なるので完全に別のコミットです。[git
rebase](http://git-scm.com/docs/git-rebase) の例にあるように

[code]

          A---B---C topic
         /
    D---E---F---G master
    
[/code]

を rebase した場合に作られる A', B', C' はA, B, C と同じような diff
やメッセージを持つけれどもコミットとしては完全に別の物です。

[code]

                  A'--B'--C' topic
                 /
    D---E---F---G master
    
[/code]

どんなコマンドを使ったとしても質問の図にあるように親が変わってしまっている以上、コミットとしては完全に別物なので branchA
のオレンジのコミットの番号を維持するのは不可能です。  
そのため、rebase 前の branchA の指すコミットと rebase 後の branchA の指すコミットは完全に別物で先祖・子孫の関係にないので
`git push` でリモートレポジトリ上の branchA を 新しい branchA に fast-forward はできません。


CC BY-SA 3.0
2015-01-06T08:42:44.303
3179
2016-05-20T13:13:20.420
2016-05-20T13:13:20.420
5575
5575
3168
answer