--single-branchクローンを「元に戻す」にはどうすればよいですか?


102

私はを使用してレポをクローンしました

git clone -b <branch name> --single-branch <github url> <target directory>

これはこのブランチのみを複製しましたが、今はマスターと他のブランチに切り替えたいです。--single-branch設定を元に戻すことができる、それをクリアして残りのレポのクローンを作成し直す以外に方法はありますか?

回答:


147

次のようにすべてのブランチをプルするようにGitに指示できます。

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

を見ると.git/config、次のようになります。

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = false
[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true

これを完全なクローンと比較したところ、唯一の違いはの下の「フェッチ」[remote "origin"]でした。

注:私はGitバージョン1.8.2を実行しています。古いバージョンのGitを実行している場合は、構成オプションが変更されている可能性があります。私のコマンドが機能しない場合は、.git/config同様のものが表示されるかどうかを確認することをお勧めします。


2
私はあなたに特別な感謝を捧げたかったのです。私はたくさんの読書とグーグルをやりましたし、このようなものに出くわすことができなかったからです。
danieltalsky 2013

2
お役に立ててうれしいです。gitあなたは(リポジトリがレイアウトされている方法を基本的にどのように理解すれば、あなたがそれをものの全体の多くを行うことができますので、コマンドラインツールは、(実際には、コマンドのほとんどは、他のコマンドの面で実装されている)信じられないほど強力である.gitフォルダの作品を)。
sarahhodne 2013

これは私にはうまくいきませんでした-これらのコマンドを実行した後git show-ref tagsもまだ失敗します。
felixfbecker

1
なお、この解決策にもなる作業ブランチは浅いOPで述べたのと同じ欠点経験だけでなく、次の構文、使用してクローン化した場合:git clone --depth=1 --branch branchname git@github.com:foobar/repo.git destinationpath
danemacmillan

1
わあ、これは直感的ではありません!奇妙なことに、Gitはこれを達成するためのコマンドをすぐには持っていません。ええ、私はそれを機能させました...そして今、彼は.gitディレクトリの設定ファイルについても知っています!
カシラジャ

60

単一のブランチを追加する場合は、以下を実行できます。

git remote set-branches --add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]

gitバージョン1.9.1で動作します


1
私はあなたに恋しています
-user1760150

4
これによりfetch =、.git / configに複数の行が追加されます。これは、リモートで2つのブランチを切り替えたいが、他のブランチの束全体をフェッチしたくない場合に非常に便利です。ありがとう!
Terry Brown、

4

使用してクローンされたローカルリポジトリに別のリモートブランチを追加するに--single-branchは、次のように機能します。

git remote set-branches --add origin [remote-branch]
git fetch
git checkout [remote-branch]

[remote-branch]たとえば、ワイルドカードを使用することもできます。

git remote set-branches --add origin release-1.*
git fetch
git checkout release-1.5

これはgitバージョン2.21.1を使用して動作します。git fetch origin [remote-branch]:[local-branch]追跡されていない状態でローカルブランチを作成するため、実行することを提案する他の回答は機能しませんでした。実行するgit pullと、最初にリモートブランチのすべてのコミットをローカルコミットに再度マージしようとしました。


2
2回目はこの答えに戻ります。非常に便利。ありがとう!
godbout

1
最も有用な答え
デニスイツコビッチ

1
3回目笑
godbout

ほぼ同じリリースサイクルのように
聞こえ

1

元のリポジトリを新しいリモートとして追加し、そこから作業するだけですか?

git remote add path/to/myrepo myNewOrigin
git fetch myNewOrigin

必要に応じて、現在の「origin」リモートを削除し、「myNewOrigin」の名前を「origin」に変更することもできます。

そこから、プル/マージ/リベースできます。


0

.git/configローカルリポジトリのファイルを変更するだけfetchです[remote origin] section

このようなものの前に

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master

そうなると

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

0

私は最初にドミニクポーラックの回答を適用しましたが、うまくいきました。しかし、新しいブランチにさらにコードをコミットした後、私はそれ以上の変更をプルすることができませんでした。

single-branch完全にリセットする別の方法がありますが、ここでは触れていません。

git remote remove origin
git remote add origin git@gitlab.com:{yourProject}/{yourRepo}.git
git branch --set-upstream-to=origin/{yourBranch}  {yourBranch}
git pull

これにより、すべてが元にリセットされます。


0

私のために働いた:

git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.