どのように Git でリモートブランチの追跡をやめますか?
私の具体的なケースでは、ローカルブランチを削除したいが、リモートブランチは削除したくないので、追跡をやめるように求めています。ローカルのものを削除して削除をリモートにプッシュすると、リモートブランチも削除されます。
単にgit branch -d the_branch
を実行することはできますが、後でgit Push
を実行しても普及しません。
後でgit Push Origin :the_branch
を実行した場合にのみ伝播しますか?
Yoshua Wuyts ' answer で述べたように、 git branch
を使って:
git branch --unset-upstream
あなたはあなたのローカルブランチを削除する必要はありません。
リモートブランチを追跡しているローカルブランチを削除するだけです。
git branch -d -r Origin/<remote branch name>
-r, --remotes
は、gitにリモート追跡ブランチを削除するように指示します(すなわち、リモートブランチを追跡するためにブランチセットを削除する)。この はリモートレポジトリ上のブランチをnot削除します !
「 git-fetchの理解に苦労している 」を参照してください。
ローカルトラッキングブランチのような概念はなく、リモートトラッキングブランチだけがあります。
したがって、Origin/master
はmaster
レポジトリ内のOrigin
のリモートトラッキングブランチです。
Dobes Vandermeer の answer で述べたように、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>
を完全に意識しなくするでしょう。
ローカルブランチとリモートブランチの関連付けを削除するには、次のコマンドを実行します。
git config --unset branch.<local-branch-name>.remote
git config --unset branch.<local-branch-name>.merge
不要な場合は、必要に応じて後でローカルブランチを削除します。
git branch -d <branch>
これはリモートブランチを削除しません。
最も簡単な方法は.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
を削除します
あなたは、リモートトラッキングブランチを削除することができます。
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.default
をupstream
に設定することができます(git <1.7.4.3の場合はtracking
)。
upstream - 現在のブランチを上流のブランチにプッシュします。
使う
git config Push.default upstream
そしてgitはあなたが "追跡をやめた"ブランチをプッシュしようとするのをやめます。
注:より簡単な解決策は、ローカルブランチの名前を変更することです。それは混乱の可能性も排除します。
これは、パターンに一致するすべてのリモートトラッキングブランチを削除するためのワンライナーです。
git branch -rd $(git branch -a | grep '{pattern}' | cut -d'/' -f2-10 | xargs)
これは質問に対する答えではありませんが、上のコメントで適切なコードフォーマットを設定する方法を理解することができませんでした。
.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
git branch --unset-upstream
はすべてのローカルブランチの追跡を停止しますが、これは望ましくありません。
[branch "branch-name"]
ファイルから.git/config
セクションを削除し、続いて
git branch -D 'branch-name' && git branch -D -r 'Origin/branch-name'
私にとって最善を尽くします。