更新されたmainブランチを作業ブランチに取り込みたいときは
$ git rebase origin/main
ですよね。
ただ、間違えて
$ git rebase origin main
とやってしまいました
そしたら、作業ブランチから、いつの間にか mainブランチにいました。
なにかをrebaseしていました。。
調べたところ
$ git rebase origin/main
は以下のコマンドと同義ということがわかりました
$ git checkout main
$ git rebase origin
ただ、他のリポジトリで同じようなことをやったら、以下のエラーが出ましした。
fatal: invalid upstream 'origin'
ただ、以下で成功する理由が分からない。
$ git rebase origin
そこで、上記が成功するリポジトリと成功しないリポジトリを調べたところ
以下の違いが分かりました。
以下のコマンドを打つと
$ git branch -a
成功するリポジトリには「remotes/origin/HEAD -> origin/main」というのがある。失敗するリポジトリにはない。
どうやら、これはシンボリックブランチというものらしいです。
これをシンボリックブランチを設定していると、
例えば、git rebase origin/mainとやる必要がなく、git rebase originでよいとのことです。
セットする方法は、セットしたいブランチで
$ git remote set-head origin -a
です
削除する方法は、
$ git remote set-head origin -d
です。
結論
作業ブランチでの①と②の違い
① git rebase origin/main
origin/mainの最新commitの上に、作業ブランチでcommitした自分の作業commitを付け足す。
② git rebase origin main
以下と同義
$ git checkout main
$ git rebase origin
作業ブランチからmainブランチに移動し、設定された設定されたシンボリックブランチの最新commitの上に、mainブランチのcommitを付け足す。
参考
Git: difference "git rebase origin/branch" VS "git rebase origin branch"
Why is there a remotes/origin/HEAD -> origin/master entry in my git branch -l -a output?