@meb4427 (えば)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【git】削除したいブランチがnot foundとなる。

Q&A

Closed

git上でとあるブランチを削除したい

git上で,
git branch
で確認できるpassword-resetブランチを削除しようと,
git branch -d password-reset
を実行すると,
error: branch 'password-reset' not found.
となってしまい,ブランチを削除できません。

どのような原因が考えられるか,ご助言いただけませんでしょうか。
スクリーンショット 2022-02-14 16.59.13.png

0 likes

5Answer

以下のように制御文字が入っているか確認してもてはどうでしょうか

git branch | cat -A

または

git branch | hexdump -C
2Like

Comments

  1. @meb4427

    Questioner

    ご助言ありがとうございます!

    ```
    git branch | cat -A
    ```
    を行ったところ,

    ```
    master$
    * password-reset$
    M-cM-^@M-^@password-reset$
    ```
    が表示されました。
    これを元に,対象ブランチの削除を試みましたが,結果は同じでした。

    ```
    git branch -d "M-cM-^@M-^@password-reset"
    error: branch 'M-cM-^@M-^@password-reset' not found.
    ```

    hexdump -Cについては,下記の結果となり,ファイル名の確認には至りませんでした。

    ```
    ubuntu:~/environment/sample_app (password-reset) $ git branch | hexdump -C
    00000000 20 20 6d 61 73 74 65 72 0a 2a 20 70 61 73 73 77 | master.* passw|
    00000010 6f 72 64 2d 72 65 73 65 74 0a 20 20 e3 80 80 70 |ord-reset. ...p|
    00000020 61 73 73 77 6f 72 64 2d 72 65 73 65 74 0a |assword-reset.|
    0000002e
    ```
    申し訳ございません。

制御文字を入れるのはprintfコマンドを使うのがよいです

git branch -d `printf '\xe3\x80\x80password-reset'`

printfを使うと同じように表示されるので上記ので消えると思うのですが

$ echo `printf '\xe3\x80\x80password-reset'` | cat -A
M-cM-^@M-^@password-reset$
$ 
2Like

Comments

  1. @meb4427

    Questioner

    ありがとうございます!
    M-cM-^@M-^@

    \xe3\x80\x80
    は,
    全角スペースを異なる文字の種類2パターンで表しているという認識でよいでしょうか?
  2. cat -A は、ascii文字以外を^やM-で表します。16進数や8進数で表すのはプログラムとかでよく使われます。全角スペースを異なる表記で表しているという認識でよいと思います
  3. @meb4427

    Questioner

    承知しました!
    ありがとうございました!

git branch の出力でブランチ名は行頭が揃うはずですが、 password-reset が1文字の半分ほど右にずれています。 password-reset の実際のブランチ名は先頭に何か不可視の空白文字を含んでいるようです。削除するにはその空白文字込みでブランチ名を指定する必要があります。

git '\[branch' .git/config を実行すると、以下のようにダブルクオート付きでブランチ名が表示されます。ブランチ名をダブルクオートごとコピーして git branch -d に与えると削除できると思います。

$ grep '\[branch' .git/config
[branch "master"]
[branch "(空白文字)password-reset"]

$ git branch -d "(空白文字)password-reset"
1Like

Comments

  1. @meb4427

    Questioner

    早速のご回答,ありがとうございました。
    しかしながら,
    ubuntu:~/environment/sample_app (master) $ grep '\[branch' .git/config
    を実行したところ,結果は下記のとおり,masterしか認識してくれない状況です。
    [branch "master"]
    他に対応策はご存じでないでしょうか。
    もしお心当たりがございましたら,ご助言いただけますと幸いです。
  2. ls .git/refs/heads/ | xargs -I '{}' echo '"{}"'

    これでクオートつきのブランチ名を表示できると思います。
  3. @meb4427

    Questioner

    ありがとうございます!

    ```
    ubuntu:~/environment/sample_app (password-reset) $ ls .git/refs/heads/ | xargs -I '{}' echo '"{}"'
    "master"
    "password-reset"
    " password-reset"
    ```
    となり,ブランチ名を特定することが出来ました。
    更に,下記のとおり,ブランチを削除することにも成功しました!

    ```
    ubuntu:~/environment/sample_app (password-reset) $ git branch -d " password-reset"
    Deleted branch  password-reset (was e39c111)
    ```
    本当にありがとうございました!
  4. 解決したようでよかったです。最後に質問のクローズをお願いします。

このような半角スペースよりも更に小さい空白文字ですが,これはどのような入力が原因なのでしょうか。

バイト列 \xe3\x80\x80 は全角スペース文字を表します。ターミナル上では何かの理由で狭く表示されているようですが。ブランチを作るとき全角スペースが入ったのでしょう。

1Like

Comments

  1. @meb4427

    Questioner

    承知しました!
    再質問にもご対応いただき,ありがとうございました!

ご助言をいただき,一旦解決し,クローズいたしましたが,再度解除させていただきました。
このような半角スペースよりも更に小さい空白文字ですが,これはどのような入力が原因なのでしょうか。
スクリーンショット 2022-02-14 23.15.04.png
自分自身で入力したためにこの問題が生じていると思いますが,心当たりがありません。
大変お恥ずかしいですが,ご存じの方がいらっしゃいましたら,教えていただきますと幸いです。

0Like

Your answer might help someone💌