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

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

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

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

Q&A

解決済

2回答

3139閲覧

git branch -a で出てくるremote/origin/...を削除したい

yochun02

総合スコア76

Git

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

0グッド

0クリップ

投稿2020/11/12 14:20

編集2020/11/12 14:22

経緯

リモートにあるhogeブランチを以下のようにチェックアウトしてしまい、コミットもしてしまいました。

git

1> git checkout -b origin/hoge

これで、ローカルにorigin/hogeというローカルブランチが出来てしまい、コミットをした後、ブランチ名を間違えたことに気づいてリセットしようと思い、ローカルブランチとトラッキングブランチorigin/hogeを削除しました。

git

1> git branch -D origin/hoge 2> git branch -dr origin/hoge

しかし、remote/origin/hogeの消し方がわからず、再度リモートブランチをチェックアウトしようとしても以下のようなエラーが出る始末になってしまいました。

git

1> git branch -a 2*master 3remotes/origin/HEAD -> origin/master 4remotes/origin/hoge 5remotes/origin/fuga 6... 7 8> git checkout -b hoge origin/hoge 9fatal: 'origin/hoge' is not a commit and a branch 'hoge' cannnot be created from it

再度fetchしても何も変化はなく、remotes/origin/hogeだけが残っている状況で上記のリモートブランチにもチェックアウトできず困っております。
どうすれば、初めの状態にリセットすることが出来るでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

リモートにあるhogeブランチを以下のようにチェックアウトしてしまい、コミットもしてしまいました。

checkout -b <name>はリモートのブランチをcheckoutする操作ではありません。
現在のヘッド(最新コミット)から新しい名前でブランチを作り、そこにcheckout(現在のブランチを移す)です。

また、remote/origin/hogeが存在するならコミットだけでなく、pushもしてしまった感じですね?

再度fetchしても何も変化はなく、remotes/origin/hogeだけが残っている状況で上記のリモートブランチにもチェックアウトできず困っております。

「リモートリポジトリにあるブランチを削除する」という操作になります。

このあたり見るとわかるかと。
https://yu8mada.com/2018/08/13/how-to-delete-both-local-and-remote-branches-in-git/#content-2

全体的に用語が混乱しているので、あまりGitの仕組みに詳しくないのかなと感じました。リモートリポジトリ・ローカルリポジトリについてもう少し調べれば操作が理解できるようになる気がします。

投稿2020/11/14 00:06

otolab

総合スコア763

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

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

yochun02

2020/11/18 06:34

説明下手ですみません。最初のは checkout -b <local branch> origin/~ とするところを間違えて(引数を入れ忘れて) checkout -b origin/~ としてしまったという意味で書きました。それでそのことに気づかないまま(HEADの内容を)もともとのリモートブランチにプッシュしてしまったのです。 git fetchで取ってこれるremote/origin/... をローカルだけで消すにはどうしたらいいのかな?と思ったのです。(git fetch --pruneでリモートにないやつは消せますが、、、)
otolab

2020/11/19 14:46

> remote/origin/... をローカルだけで消す ということは普通はやらないですね。 たとえ消せても、リモートにブランチが残っている限りfetchする度に同期されます。(gitは分散型のシステムで、ローカルにもリモートのリポジトリの完全なコピーを持ちます) なので、もし本当に消したければリモートのブランチを消し、`git fetch --prune`する手順になります。
yochun02

2020/11/19 17:58

確かに!リモートの状態をコピーしてくるわけだからそうすれば解決ですね。ありがとうございます。
guest

0

力技ではありますが、gitコマンドからremotes/origin/hogeを削除して再度fetchするのではなく、直接
.git/refs/remotes/origin/
にファイルhoge

<リモートの最新コミットのハッシュ値>

を作成してターミナルをリロードしたらチェックアウトできました。
多分gitのコマンドでもあるはず。。。

投稿2020/11/12 14:38

編集2020/11/12 14:39
yochun02

総合スコア76

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問