web-dev-qa-db-ja.com

Gitでリモートブランチの追跡をやめるにはどうすればいいですか?

どのように Git でリモートブランチの追跡をやめますか?

私の具体的なケースでは、ローカルブランチを削除したいが、リモートブランチは削除したくないので、追跡をやめるように求めています。ローカルのものを削除して削除をリモートにプッシュすると、リモートブランチも削除されます。

単にgit branch -d the_branchを実行することはできますが、後でgit Pushを実行しても普及しません。

後でgit Push Origin :the_branchを実行した場合にのみ伝播しますか?

473
Jason Cohen

Yoshua Wuyts ' answer で述べたように、 git branch を使って:

git branch --unset-upstream

別のオプション:

あなたはあなたのローカルブランチを削除する必要はありません。

リモートブランチを追跡しているローカルブランチを削除するだけです。

git branch -d -r Origin/<remote branch name>

-r, --remotesは、gitにリモート追跡ブランチを削除するように指示します(すなわち、リモートブランチを追跡するためにブランチセットを削除する)。この はリモートレポジトリ上のブランチをnot削除します

git-fetchの理解に苦労している 」を参照してください。

ローカルトラッキングブランチのような概念はなく、リモートトラッキングブランチだけがあります。
したがって、Origin/mastermasterレポジトリ内のOriginのリモートトラッキングブランチです。

Dobes Vandermeeranswer で述べたように、localブランチに関連する設定もリセットする必要があります。

git config --unset branch.<branch>.remote
git config --unset branch.<branch>.merge

<branchname>のアップストリーム情報を削除します。
ブランチが指定されていない場合は、デフォルトで現在のブランチになります。

(git 1.8+、2012年10月、 commit b84869e による CarlosMartínNieto(carlosmn

それはどんなPush/pullもOrigin/<remote branch name>を完全に意識しなくするでしょう。

595
VonC

現在のブランチのアップストリームを削除するには

$ git branch --unset-upstream

これはGit v.1.8.0以降で利用可能です。 (出典: 1.7.9 ref1.8.0 ref

ソース

175
Yoshua Wuyts

ローカルブランチとリモートブランチの関連付けを削除するには、次のコマンドを実行します。

git config --unset branch.<local-branch-name>.remote
git config --unset branch.<local-branch-name>.merge

不要な場合は、必要に応じて後でローカルブランチを削除します。

git branch -d <branch>

これはリモートブランチを削除しません。

106

最も簡単な方法は.git/configを編集することです

これがサンプルファイルです

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
[remote "Origin"]
        url = [email protected]:repo-name
        fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "test1"]
        remote = Origin
        merge = refs/heads/test1
[branch "master"]
        remote = Origin
        merge = refs/heads/master

merge = refs/heads/test1ブランチセクションの行test1を削除します

32

あなたは、リモートトラッキングブランチを削除することができます。

git branch -d -r Origin/<remote branch name>

vonCが上で述べたように。ただし、ブランチのローカルコピーを保持している場合、git Pushはそのブランチをプッシュしようとします(これにより、早送り以外のエラー が発生する可能性があります)それはラフィン のためにしました)。これはconfig Push.defaultがデフォルトでmatchingになっているからです。

matching - 一致するブランチをすべてプッシュします。両端で同じ名前を持つすべてのブランチは、一致していると見なされます。これがデフォルトです。

Push.defaultの下の http://git-scm.com/docs/git-config を参照してください)

これはおそらくリモートトラッキングブランチを削除したときに望んでいたことではないので、Push.defaultupstreamに設定することができます(git <1.7.4.3の場合はtracking)。

upstream - 現在のブランチを上流のブランチにプッシュします。

使う

git config Push.default upstream

そしてgitはあなたが "追跡をやめた"ブランチをプッシュしようとするのをやめます。

注:より簡単な解決策は、ローカルブランチの名前を変更することです。それは混乱の可能性も排除します。

9
CletusW

これは、パターンに一致するすべてのリモートトラッキングブランチを削除するためのワンライナーです。

git branch -rd $(git branch -a | grep '{pattern}' | cut -d'/' -f2-10 | xargs)

3
infomaniac

これは質問に対する答えではありませんが、上のコメントで適切なコードフォーマットを設定する方法を理解することができませんでした。

.gitconfigの派手なshmancy [alias]エントリにレシピを@Dobesでサブミットしました。

# to untrack a local branch when I can't remember 'git config --unset'
cbr = "!f(){ git symbolic-ref -q HEAD 2>/dev/null | sed -e 's|refs/heads/||'; }; f"
bruntrack = "!f(){ br=${1:-`git cbr`};  \
    rm=`git config --get branch.$br.remote`; \
    tr=`git config --get branch.$br.merge`; \
    [ $rm:$tr = : ] && echo \"# untrack: not a tracking branch: $br\" && return 1; \
    git config --unset branch.$br.remote; git config --unset branch.$br.merge; \
    echo \"# untrack: branch $br no longer tracking $rm:$tr\"; return 0; }; f"

それから私は走ることができます

$ git bruntrack branchname
1
qneill

git branch --unset-upstreamはすべてのローカルブランチの追跡を停止しますが、これは望ましくありません。

[branch "branch-name"]ファイルから.git/configセクションを削除し、続いて

git branch -D 'branch-name' && git branch -D -r 'Origin/branch-name'

私にとって最善を尽くします。

0
Bob