Gitの小ネタおれおれAdvent Calendar 2022 – 10 日目

ここまでのあらすじ:別ブランチで作業完了して push したところでブランチ名のチケット番号が間違ってるのに気づいてしまった……。

元々間違っていたかもしれないし、アップロードしたときに打ち間違えたのかもしれないです。どっちでも大丈夫。

連携は自動化しとけというのは置いておいて、とにかく修復作業に入ります。

  • 誤: PRJ-123NG
  • 正: PRJ-128OK
  1. push したもの(リモートのブランチ)を削除
  2. ローカルのブランチの名前を修正
  3. 正しい名前で改めて push

リモート(サーバー)のブランチを削除

直接名前を変えられないみたいなのでいったん削除します。

$ git push --delete origin PRJ-123NG

origin がリモートの名前、PRJ-123NG が(間違っていた)ブランチの名前です。

別解として git push origin :<ブランチ名> というのもあるんですが、: て何だよって感じなので --delete の方がおすすめです。

以下 git push --help より。

`-d`, `--delete`
    All listed refs are deleted from the remote repository. This is the same as prefixing all refs with a colon.

ローカルのブランチの名前を修正

$ git switch PRJ-123NG
$ git branch -m PRJ-128OK

ちなみに変更は git branch -m <今の名前> <新しい名前> でもできて、うち <今の名前> の部分を省略すると現在ブランチになります。

正しい名前で改めて push

$ git push -u origin HEAD

-u, --set-upstream

ローカルのブランチとリモートのブランチとを紐づけます。git push 時に毎度リモート名やブランチ名を入力しなくても良くなるので便利。

紐づいてないと指定しろエラーになります。それはそう。

$ git push
fatal: The current branch xxx has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin xxx

HEAD

現在ブランチを指してくれます。これなら長い名前を打ち間違える心配がなくて簡単。

git push --help の EXAMPLES に載ってます。

git push origin HEAD

A handy way to push the current branch to the same name on the remote.