Gitでリモート ブランチの追跡を停止するにはどうすればよいですか?
私の具体的なケースでは、リモートブランチではなくローカルブランチを削除したいので、追跡を停止するよう求めています。ローカル ブランチを削除し、削除をリモート ブランチにプッシュすると、リモート ブランチも削除されます。
私はただ行うgit branch -d the_branch
ことができgit push
ますか?
git push origin :the_branch
後で実行した場合にのみ伝播しますか?
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 に指示します (つまり、リモート ブランチを追跡するブランチ セットを削除します)。これは、リモート リポジトリのブランチを削除しません。
「git-fetch を理解するのに苦労する」を参照してください
ローカル追跡ブランチのような概念はなく、リモート追跡ブランチのみです。
レポ内のorigin/master
リモート追跡ブランチも同様ですmaster
origin
Dobes Vandermeerのanswerで述べたように、ローカルブランチに関連付けられている構成もリセットする必要があります。
git config --unset branch.<branch>.remote
git config --unset branch.<branch>.merge
のアップストリーム情報を削除し
<branchname>
ます。
ブランチが指定されていない場合、デフォルトで現在のブランチになります。
(git 1.8+、2012 年 10 月、コミット b84869e by Carlos Martín Nieto ( carlosmn
) )
これにより、プッシュ/プルが完全に認識されなくなり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 = git@example.com: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
でも、 はそのブランチをプッシュしようとします (これにより、 ruffinの場合のように非早送りエラーが発生する可能性があります)。これは、構成がpush.default
デフォルトで次のようになっているためmatching
です。
matching - 一致するすべてのブランチをプッシュします。両端で同じ名前を持つすべてのブランチは、一致していると見なされます。これがデフォルトです。
(の下のhttp://git-scm.com/docs/git-configpush.default
を参照してください)
これはおそらく、リモート追跡ブランチを削除したときに望んでいたものではないので、に設定できますpush.default
(upstream
またはtracking
、git < 1.7.4.3 がある場合)
アップストリーム - 現在のブランチを上流のブランチにプッシュします。
使用して
git config push.default upstream
git は、「追跡を停止」したブランチのプッシュを停止します。
注:より簡単な解決策は、ローカル ブランチの名前を別の名前に変更することです。これにより、混乱の可能性も排除されます。
これは質問への回答ではありませんが、上記のコメントで適切なコードの書式設定を取得する方法がわかりませんでした...自動ダウンレピュテーションビーダムドが私のコメントです。
.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 fetch --prune (別名 git fetch -p)
この方法を使用して、リモートブランチを削除できます
git remote remove <your remote branch name>