গিটের কোনও দূরবর্তী শাখা ট্র্যাক করা আপনি কীভাবে বন্ধ করবেন?


555

গিটের কোনও দূরবর্তী শাখা ট্র্যাক করা আপনি কীভাবে বন্ধ করবেন ?

আমি ট্র্যাকিং বন্ধ করতে বলছি কারণ আমার কংক্রিটের ক্ষেত্রে, আমি স্থানীয় শাখাটি মুছতে চাই, তবে দূরবর্তীটি নয়। স্থানীয় একটিকে মুছে ফেলা এবং মুছে ফেলা দূরবর্তী স্থানে রাখলে দূরবর্তী শাখাটিও মুছে ফেলা হবে:

আমি কি git branch -d the_branchতা করতে পারি , এবং পরে প্রচার করলে তা প্রচার হবে না git push?

আমি যদি git push origin :the_branchপরে চালাতাম তবে এটি কি প্রচার করবে ?

উত্তর:


707

হিসাবে উল্লেখ Yoshua Wuyts ' উত্তর ব্যবহার git branch:

git branch --unset-upstream

অন্যান্য অপশন:

আপনাকে আপনার স্থানীয় শাখাটি মুছতে হবে না।

রিমোট শাখা ট্র্যাক করছে এমন স্থানীয় শাখাটি কেবল মুছুন:

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

-r, --remotesগিটকে রিমোট-ট্র্যাকিং শাখাটি মুছে ফেলতে বলে (যেমন, দূরবর্তী শাখাকে ট্র্যাক করার জন্য ব্রাঞ্চ সেটটি মুছুন)। এই হবে না দূরবর্তী রেপো উপর শাখা মুছতে !

দেখুন " বুঝতে একটি কঠিন সময় হচ্ছে Git-আনা "

স্থানীয় ট্র্যাকিং শাখার মতো ধারণা নেই, কেবল দূরবর্তী ট্র্যাকিং শাখা।
তাই origin/masterজন্য একটি দূরবর্তী ট্র্যাকিং শাখা masterমধ্যে originরেপো

হিসাবে উল্লেখ Dobes Vandermeer এর উত্তর , এছাড়াও আপনি যুক্ত কনফিগারেশন পুনরায় সেট করার প্রয়োজন স্থানীয় শাখা:

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

এর জন্য প্রবাহিত তথ্য সরান <branchname>
যদি কোনও শাখা নির্দিষ্ট না করা হয় তবে এটি বর্তমান শাখার ডিফল্ট।

(গিট 1.8+, অক্টোবর, 2012, কার্লোস মার্টন নাইটো দ্বারা বিট 84869e ( carlosmn) )

এটি কোনও ধাক্কা / টান পুরোপুরি অজান্তে করে দেবে origin/<remote branch name>


8
দূরবর্তী ট্র্যাকিং শাখা গিট আনার পরে পুনরায় তৈরি করা হয়। এগুলি বাদ দেওয়া কি সম্ভব?
ম্যাট আর

1
@ ম্যাট: আমি বিশ্বাস করি remote.<name>.fetchরেফস্পেক কনফিগারেশন সেটিংস সেট করে এটি করা হবে তবে আমি নিশ্চিত নই যে রেফস্পেক নির্দিষ্ট করার সময় আপনি কোনও শাখা বাদ দিতে পারেন কিনা।
ভনসি

এটি আমার কাছেও সেভাবে হাজির হয়েছিল; যদিও আমি দ্রুত এবং ফরোয়ার্ডের পরে শাখাগুলির মধ্যে আপাত সংযোগ অদৃশ্য হয়ে যায় আমার স্থানীয় শাখাটি পুনরায় চালু করতে সক্ষম হয়েছি।
উইলোলার

7
@ আরফিন: এটি সম্পূর্ণ স্বাভাবিক: আপনার রেপোতে স্থানীয়ভাবেgit branch -d -r origin/<remote branch name> ঘোষণা করা দূরবর্তী ট্র্যাকিং শাখাটি মুছে ফেলবে । এটি রিমোট রেপোতে নিজেই শাখাটি মুছবে না (কেবল এটিই করবে)। সুতরাং যখন আপনি আপনার স্থানীয়কে দূরবর্তী উন্নয়ন শাখার (দূরবর্তী রেপুতে) পৃথক ইতিহাস সহ চাপ দিচ্ছেন , তখনও আপনি সতর্কতা পাবেন। git push :developmentdevelopmentnon-fast-forward
ভনসি

1
@ মার্কো সত্য, তবে আমি যাইহোক এটি করা পছন্দ করি, আমি এটি "ক্লিনার" বলে মনে করি।
ভনসি

200

বর্তমান শাখার জন্য প্রবাহটি অপসারণ করতে:

$ git branch --unset-upstream

এটি গিট ভি .১.৮.০ বা আরও নতুনর জন্য উপলব্ধ। (সূত্র: 1.7.9 রেফ , 1.8.0 রেফ )

সূত্র


20
নির্বাচিত উত্তর হওয়া উচিত ছিল।
কায়সার

9
আপনি যদি বর্তমান শাখাটি সরাতে না চান তবে সহজভাবে:git branch --unset-upstream [branchname]
সোনাতটা

2
দেখে মনে হচ্ছে এটি নতুন। আরও কিছু তথ্য সুন্দর হবে। যেমন পরিচয়ের সংস্করণ version
ম্যানুয়েলস্কিনিড

অবশ্যই এটি নিশ্চিত, নির্ধারিত দ্বিধা বোধ করুন যখন আপনি এটি খুঁজে পাবেন এবং আমি আনন্দের সাথে মন্তব্যটি আপডেট করব
যোশুয়া ওয়্যুটস

হুম, আমি পেয়ে করছি fatal: 'origin/master' does not appear to be a git repository fatal: Could not read from remote repository. এই কাজ এবং Git টান উৎপত্তি / মাস্টার চেষ্টা করার পরে
information_interchange

106

স্থানীয় এবং দূরবর্তী শাখার মধ্যে সংযোগ অপসারণ:

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

আপনার যদি এটির প্রয়োজন না হয় তবে পরে স্থানীয় শাখাটি মুছুন:

git branch -d <branch>

এটি দূরবর্তী শাখা মুছবে না।


11
git branch -d <branch>সমিতি অপসারণ করার প্রয়োজন হয় না
মার্কো

1
আমি JIRA ব্যবহার করছি। আমি আবার টানতে যখন শাখা প্রদর্শিত হবে। আমি কীভাবে এটি প্রতিরোধ করতে পারি?
পাউডার366

1
@ মার্কো সঠিক, তবে আপনি যদি ব্যবহার করেন git branch -vvতবে পুরানো শাখাগুলি আপনি না করা অবধি দেখতে পাবেন git branch -d <branch>
সেলডমনিডি

@ পাউডার366 আপনার সেটিংসের উপর নির্ভর করে সমস্ত দূরবর্তী শাখা git pullদখল করতে পারে এবং এটি রিমোটে "উপস্থিত" বলে মনে করে এমন কোনওটিকে পুনরায় যুক্ত করতে পারে। আপনি এই দ্বারা "সমস্ত শাখা টানুন" আচরণটি পরিবর্তন করে বা করতে পারেন । আরও এখানেgit config [--global] push.default simplegit config [--global] push.default currentpush.default
সেলডমনিডি

1
@ সেলডমনিডি আমি মনে করি আপনি কোনও ডিভিসিএসের বিন্দুটি মিস করছেন? মুল বক্তব্যটি হ'ল আমার একটি শাখা থাকতে পারে যা একটি প্রবাহ শাখা ট্র্যাকিং শুরু করে, তবে আমি যে প্রবাহটি শাখাটি ব্যবহার করছে না তা অনুসরণ করার জন্য আমি বিচ্ছিন্ন করে। সেক্ষেত্রে, শাখাটি "পুরাতন" নয় (কারণ আমি এখনও এটিতে বিকাশ করছি) বা "অপ্রয়োজনীয়" (কারণ আমি এটি ব্যবহার করছি)। এটি একটি ডিভিসিএসের ডিজাইনের একটি বড় অংশ .. এটি কি কোনও অর্থবোধ করে?
মার্কো

33

সহজ উপায় হ'ল সম্পাদনা করা .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শাখা অধ্যায়


3
+1 আমি নিশ্চিতভাবে বলতে পারি না যে এটি সবচেয়ে সহজ পদ্ধতি, তবে এটি অবশ্যই আমার পক্ষে বোঝার পক্ষে সহজতম প্রমাণিত হয়েছে (এবং আশা করি এর জন্য এটি মনে করার জন্য)!
ঋষি

চমৎকার সমাধান +1। এটি আসলে সেই জায়গা যেখানে ট্র্যাকিং নিবন্ধিত হয়েছে, পরিবর্তন করা সহজ, এটি কী করে তা পরিষ্কার করুন। কমান্ডলাইনও .git/configউপলব্ধ।
hakre

5
তবে, এটি ডোবস ভ্যান্ডারমিয়ারের "গিট কনফিগারেশন - আনসেট" সমাধানের সমান। "গিট কনফিগারেশন" এই ফাইলটি সম্পাদনা করে।
জেজেড

10

আপনি রিমোট ট্র্যাকিং শাখা ব্যবহার করে মুছতে পারেন

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

ভোনসি উপরোক্ত উল্লেখ হিসাবে। তবে, আপনি যদি শাখার স্থানীয় কপিটি রাখেন তবে git push এখনও সেই শাখাটি ধাক্কা দেওয়ার চেষ্টা করবে (যা আপনাকে রাফিনের জন্য যেমন একটি দ্রুত-অগ্রসর ত্রুটি দিতে পারে )। এটি কারণ কনফিগারটি push.defaultডিফল্ট matchingযার অর্থ:

ম্যাচিং - সমস্ত মিলে যাওয়া শাখা টিপুন push উভয় প্রান্তে একই নামে সমস্ত শাখা মেলানো বলে মনে করা হয়। এটি ডিফল্ট।

( নীচে http://git-scm.com/docs/git-config দেখুন push.default)

এই দেখে সম্ভবত, আপনি যা চেয়েছিলেন যখন আপনি দূরবর্তী-ট্র্যাকিং শাখা মোছা আপনি সেট করতে পারেন নয় push.defaultথেকে upstream(অথবা trackingআপনি Git আছে যদি <1.7.4.3)

upstream - বর্তমান শাখাটিকে তার প্রবাহিত শাখায় চাপ দিন।

ব্যবহার

git config push.default upstream

এবং গিটটি "ট্র্যাকিং বন্ধ করে দিয়েছে" এমন শাখাগুলি ঠেলে দেওয়ার চেষ্টা বন্ধ করবে।

দ্রষ্টব্য: সহজ সমাধানটি হ'ল কেবল আপনার স্থানীয় শাখার নাম পরিবর্তন করে অন্য কিছু। এটি বিভ্রান্তির কিছুটা সম্ভাবনাও দূর করে দেবে।


3

কোনও প্যাটার্নের সাথে মিলে সমস্ত দূরবর্তী ট্র্যাকিং শাখাগুলি সরানোর জন্য এখানে একটি ওয়ান-লাইনার রয়েছে:

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


যদি কেবল রিমোট-ট্র্যাকিং শাখাগুলিই যদি না ফেলে রাখা হয় (মুছে ফেলা হয়) তবে আমি মনে করি এটি সংক্ষিপ্ত এক-লাইন বিকল্প:git branch -r -D $(git branch -r | grep -v "master")
dma_k

1

এটি প্রশ্নের উত্তর নয়, তবে উপরের মন্তব্যে কীভাবে শালীন কোড ফর্ম্যাটিং করবেন তা আমি বুঝতে পারি না ... সুতরাং অটো-ডাউন-সুনাম-বদনাম করা এখানে আমার মন্তব্য।

আমার .gitconfig- তে একটি চমকপ্রদ shmancy [ওরফে] প্রবেশে @ ডবস দ্বারা জমা দেওয়া রেসিপিটি আমার কাছে রয়েছে

# 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
+1 টি। উপরের আমার উত্তরটি ছাড়াও সুন্দর ওরফে ।
ভনসি

-1

git branch --unset-upstream সমস্ত স্থানীয় শাখা ট্র্যাক করা বন্ধ করে দেয়, যা কাম্য নয়।

তারপরে ফাইলটি [branch "branch-name"]থেকে বিভাগটি সরান.git/config

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

আমার জন্য সবচেয়ে ভাল কাজ করে।


-1

আপনি আপনার দূরবর্তী শাখা অপসারণ করতে এই উপায়টি ব্যবহার করতে পারেন

git remote remove <your remote branch name>

1
এটি সেই রিমোটের জন্য সমস্ত দূরবর্তী ট্র্যাকিং শাখাগুলি সরিয়ে ফেলবে : il আপনার একাধিক রয়েছে, এটি সমস্যাযুক্ত হতে পারে।
ভনসি

-2

এটি করার সহজতম উপায় হ'ল ব্রাঙ্কটি দূর থেকে মুছে ফেলা এবং তারপরে ব্যবহার করুন:

গিট ফেচ - প্রিন (ওরফে গিট ফেচ-পি)


14
আমি বিভ্রান্ত, ওপি দূরবর্তী শাখাটি মুছে ফেলতে চায়নি।
madth3

আপনার স্থানীয় সংগ্রহশালা থেকে ট্র্যাক করা দূরবর্তী শাখাগুলি পরিষ্কার করা ভাল যা দূরবর্তী খালি সংগ্রহস্থলে মুছে ফেলা হয়েছিল।
মারেক পোডিমা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.