質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Q&A

解決済

2回答

10656閲覧

削除もcheckoutもできないブランチが存在する

ikuwow

総合スコア462

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

3グッド

0クリップ

投稿2015/09/06 04:45

編集2015/09/09 05:44

開発環境で削除もcheckoutもできないブランチが存在して、非常に不思議な状態に陥っています。

-bash-4.1$ git branch develop * master -bash-4.1$ git branch -d develop error: branch 'develop' not found. -bash-4.1$ git checkout develop error: pathspec 'develop' did not match any file(s) known to git.

この状態で同名のブランチを作成することができてしまいます。

-bash-4.1$ git branch develop -bash-4.1$ git branch develop develop * master

末尾に空白が付いているというわけでもないようです。

-bash-4.1$ git branch 20150909_755\ fatal: '20150909_755 ' is not a valid branch name. -bash-4.1$ git branch 20150909_755\ \ fatal: '20150909_755 ' is not a valid branch name. -bash-4.1$ git branch 20150909_755\ \ \ fatal: '20150909_755 ' is not a valid branch name. -bash-4.1$ git branch 20150909_755\ \ \ \ fatal: '20150909_755 ' is not a valid branch name.

ローカルブランチは多数ありますが、なぜかこのdevelopブランチだけがこういう状態になっています。

作業環境はCentOS 6.4、gitのバージョンは1.8.5.3です。
このブランチはなぜ発生しているのでしょうか?
そしてどうやったらこのブランチは削除できるのでしょうか。

-bash-4.1$ git --version git version 1.8.5.3

追記

上の出力はiTermでの出力でしたが、Terminalで出力したところ以下のように表示されました。

-bash-4.1$ git branch * develop deve?Llop master
mhashi, naoyan, jojo3👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pi-chan

2015/09/08 23:23

作業環境はmacですか?ローカルブランチは大量にあるのですか?それとも消せないブランチを含めて3つ?
guest

回答2

0

ベストアンサー

回答が遅くなり申し訳ありません。。。

追記でご提供頂いた「Terminalで出力した」結果の情報は、とても重要な情報でしたね。

不具合の原因は、yubaさんのご回答でも言及されている通り、おそらく何らかの理由で通常は非表示の制御文字か何かが混入してしまったのだと思います。
その結果、「iTerm」では表示されず違いに気づかなかったためにうまく操作できなかったのでしょう。
しかし、見えないのですから、うまく入力することも難しいかも知れません。

そこで、たとえばこんな方法を試してみてはいかがでしょうか?
つまり、git branchで表示されたリストから、逆にきちんと指定可能な(名前にゴミの混入していない)ものを除外して、残ったもの(本来消したいbranch)を消すという発想です。(参考)

以下はMacで試してみた例ですが、基本的には全く同じコマンドで実行可能だと思います。

Bash

1 2# まずは branch 名の一覧を確認 3$ git branch 4* b001 5 b002 6 b003 7 master 8$ 9 10# 先頭の2文字分を削除してテキストファイルへ保存 11$ git branch |cut -b3- >/tmp/branch.lst 12 13# branch 名リストの保存結果を確認 14# このとき cat コマンドに「-nv」オプションを付ける 15# そうすると、行番号と、もし非表示文字が混入していれば ^X みたいな表示になる 16$ cat -nv /tmp/branch.lst 17 1 b001 18 2 b002 19 3 b0^X03 ← ゴミの混入した名前を見つけやすい 20 4 master 21$ 22 23# 今の例では "3行目" が削除対象とすると、sed コマンド等でその行をリストから削除する 24$ sed -i'' 3d /tmp/branch.lst 25$ 26 27# リストが正しくできているか結果を確認 28$ cat -nv /tmp/branch.lst 29 1 b001 30 2 b002 31 3 master 32$ 33# 念のため、grep コマンドで目的の branch 名だけ抽出できることを確認 34$ git branch |grep -vf /tmp/branch.lst 35 b003 36$ 37 38# grep コマンドに「-vf」オプションを付け、ファイル内のリストを「除外」したものを 39# xargs コマンドで git branch コマンドへ渡し削除する 40$ git branch |grep -vf /tmp/branch.lst |xargs git branch -D 41Deleted branch b003 (was 1620929). 42$ 43 44# 目的のブランチを削除できた! 45$ git branch 46* b001 47 b002 48 master 49$

これで解決できることを心よりお祈りしております!

投稿2015/09/10 15:15

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikuwow

2015/09/12 01:08

丁寧なご回答ありがとうございます! 確かによくわからない制御文字が入っていたので、grepしてxargsすることで削除出来ました。
guest

0

制御文字か何かが混入した名前であるのは間違いなさそうですね。
Tabキーで補完入力することで正確な名前を渡せるのではないでしょうか。

投稿2015/09/06 04:59

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikuwow

2015/12/03 01:35

ありがとうございます! 確かによくわからない制御文字が入っていたようでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問