আমি কেন গিটহাবে সরানো একটি শাখা চেকআউট করতে পারি?


26

আমাদের গিটহাবের সংগ্রহশালায় একজন সহকর্মী নামের একটি শাখা মুছে ফেললেন release। তবে আমি যখন git checkout releaseস্থানীয়ভাবে চালাই , আমি সর্বদা মুছে ফেলা শাখাটি পাই release। একই, এমনকি যখন আমি অন্য একটি শাখা পরীক্ষা করেছিলাম, তখনও সেই releaseশাখাটি মুছে ফেলি git branch -D releaseএবং আবার দৌড়ে git checkout release

গিটহাবের সংগ্রহস্থলটিতে কিছু ঠিক করার আছে, নাকি আমি স্থানীয়ভাবে কিছু ঠিক করব?


1
git branch --remoteচলমান পরে আউটপুট কি git fetch? git fetch -pমুছে ফেলা দূরবর্তী শাখাগুলি ভুলে যেতে আপনার ছাঁটাই করতে হতে পারে ।
স্টিফেন কিট

2
যদি সেই শাখাটি যদি কখনও গিটহাবের দিকে ঠেলা যায় এবং আপনি তার পরে টানেন তবে আপনার কাছে শাখার একটি অনুলিপিও রয়েছে। প্রতিটি গিট সংগ্রহস্থল সম্পূর্ণ এবং নিজেই সম্পূর্ণ, যদি না আপনি অগভীর ক্লোন বা কিছু ব্যবহার করেন।
মুড়ু

@ স্টেফেনকিট: ধন্যবাদ git branch --remoteআউটপুট origin/release। আপনার কি git fetch -pঅতিরিক্ত যুক্তি ছাড়াই চালানো বলতে চাইছেন এবং এটি মুছে ফেলা সমস্ত দূরবর্তী শাখাগুলি ছাঁটাই করবে?
টিম

1
হ্যাঁ, git fetch -pকোনও অতিরিক্ত যুক্তি ছাড়াই মুছে ফেলা সমস্ত দূরবর্তী শাখাগুলি ছাঁটাই করা হবে।
স্টিফেন কিট

1
বিতরণ সংস্করণ নিয়ন্ত্রণ বিশ্বের আপনাকে স্বাগতম!
ক্রাইলিস -হান ধর্মঘট-

উত্তর:


24

রিমোট পার্শ্বে একটি শাখা মুছে ফেলার পরে আপনি এখনও স্থানীয়ভাবে এনে আসা দূরবর্তী শাখাটি দেখতে পাবেন, দেখুন:

$ git branch -a
[...]
release
remotes/origin/release
[...]

আপনি কেবল "রিলিজ" অপসারণ করেছেন তবে "রিমোটস / উত্স / প্রকাশ" নয়। এটি এভাবে মুছুন:

$ git branch -rd origin/release

বা সমস্ত আনীত শাখাগুলি সরিয়ে ফেলুন যা দূরবর্তী দিকে আর বিদ্যমান নেই:

$ git remote prune origin 

ধন্যবাদ। ইন git branch -rd origin/release, -rমানে কি? -dমানে কি একই -D? পারি git branch -rd origin/releaseপ্রতিস্থাপিত হতে git branch -d remotes/origin/release?
টিম

@ টিম: ম্যানুয়াল থেকে; -r: List or delete (if used with -d) the remote-tracking branches.; -ড:Shortcut for --delete --force.
লুপ

ধন্যবাদ। পারি git branch -rd origin/releaseপ্রতিস্থাপিত হতে git branch -d remotes/origin/release?
টিম

@ টিম কোনও প্রত্যন্ত শাখাগুলি -rবোঝায় না , এটি প্রয়োজন। স্থানীয় এবং দূরবর্তী শাখাগুলি বিভিন্ন ডিরেক্টরিতে তুলনা করা এবং সংরক্ষণ করা হয় । আপনার কাছে এমন একটি স্থানীয় শাখাও থাকতে পারে যা ডেকে মোছা হবে । এটি বিভ্রান্তিকর লাগতে পারে তবে আপনি কেবল চারপাশে খেলতে পারবেন, অদ্ভুত নামের সাথে শাখা তৈরি করতে পারেন এবং দেখতে কীভাবে তা দেখতে পান । ls -l .git/refs/headsls -l .git/refs/remotesremotes/origin/release-r.git/
rudimeier

15

যখন শাখাগুলি দূরবর্তীভাবে মুছে ফেলা হয়, আপনাকে আপনার স্থানীয় সংগ্রহস্থল ছাঁটাই করতে হবে - এটি করার সবচেয়ে সহজ উপায়টি এটির সাথে

git fetch -p

এটি আপনার স্থানীয় সংগ্রহস্থলকে দূরবর্তী সংগ্রহস্থলের সমস্ত পরিবর্তনের সাথে আপডেট করবে, তবে আপনার স্থানীয় কোনও শাখা আপডেট না করে। এটি চালানোর পরে,

git branch --remote

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

গিট সংগ্রহস্থলগুলি সম্পূর্ণ আপনার নিজের সিস্টেমে বা সার্ভারে সম্পূর্ণ। সুতরাং যখন আপনি প্রথম কোনও সংগ্রহস্থলটি ক্লোন করেন, আপনি একটি সম্পূর্ণ অনুলিপি পাবেন এবং আপনার স্থানীয় গিটটি দূরবর্তী সমস্ত শাখার পাশাপাশি আপনার স্থানীয় শাখা সম্পর্কে "জানে"। এই তথ্যটি স্বয়ংক্রিয়ভাবে সিঙ্ক হয় না, সুতরাং যখন আপনার সহকর্মী releaseসার্ভারে শাখাটি মুছে ফেলেন, তখন আপনার স্থানীয় গিট সংগ্রহস্থলটি একটি দূরবর্তী releaseশাখার ধারণাটি হারায় নি । git fetchদূরবর্তী শাখাগুলিতে সমস্ত স্থানীয় তথ্য আপডেটের সাথে সিঙ্ক করা হচ্ছে যাতে তারা সার্ভারে রাষ্ট্রের সাথে মিলিত হয় (কঠোরভাবে বলতে গেলে, দূরবর্তী সংগ্রহস্থল, যেখানেই হোক না কেন), তবে দূরবর্তী শাখাগুলিতে কোনও স্থানীয় তথ্য মুছে না ফেলে। git fetch -p(বা git fetch --prune, বা git remote prune) দিয়ে ছাঁটাই দূরবর্তী শাখাগুলির স্থানীয় তথ্য মুছে ফেলা হয়েছে যা মুছে ফেলা হয়েছে।


ধন্যবাদ। "দূরবর্তী সংগ্রহস্থলের সমস্ত পরিবর্তন করে আপনার স্থানীয় সংগ্রহস্থল আপডেট করুন, তবে আপনার স্থানীয় কোনও শাখা আপডেট না করে"। এটি আমার স্থানীয় শাখাগুলির আপডেট নয়, তা কী আপডেট?
টিম

এটি সমস্ত দূরবর্তী আপডেট। আপনার স্থানীয় গিট সংগ্রহস্থলটি আপনার স্থানীয় শাখা এবং দূরবর্তী শাখাগুলি পৃথক করে, তবে দূরবর্তী শাখাগুলি সার্ভারের সাথে জাদুকরীভাবে সিঙ্ক হয় না - সেগুলি স্থানীয়ভাবেও উপস্থিত রয়েছে (যেমনটি আপনার স্থানীয় গিট রিপোজিটরিতে সংরক্ষণ করা আছে)। আনতে আপনার স্থানীয় সংগ্রহস্থল দূরবর্তী সংগ্রহস্থলের সাথে সিঙ্ক করে এবং দূরবর্তী শাখাগুলির অবস্থা আপডেট করে; ডিফল্টরূপে মুছে ফেলা দূরবর্তী শাখাগুলি দূরবর্তী শাখাগুলির স্থানীয় তথ্য থেকে সরানো হয় না, -p( --prune) এটি বাধ্য করে।
স্টিফেন কিট

ধন্যবাদ। কেন মোছার করা হয়নি releaseদ্বারা শাখা git branch -D releaseসামনে git checkout releaseকরতে git checkout releaseপাওয়া বন্ধ releaseশাখা?
টিম

1
কারণ git checkout releaseসেই নামের সাথে কোনও দূরবর্তী শাখা থাকলে স্বয়ংক্রিয়ভাবে একটি শাখা পুনরায় তৈরি করবে।
স্টিফেন কিট

"রিমোট ব্রাঞ্চ" দ্বারা, আপনি কি আমার স্থানীয় সংগ্রহশালা বা গিথুব সংগ্রহশালার কোনও শাখা বোঝাতে চান? যদি প্রাক্তন হয় তবে git branch -D releaseইতিমধ্যে releaseআমার স্থানীয় সংগ্রহস্থলে শাখাটি মুছে ফেলেছে ; পরে যদি কোনও সহকর্মী releaseগিটহাবের শাখাটি মুছে ফেলেছে ; সুতরাং আমি এখনও নিশ্চিত নই কেন "যদি সেই নামের সাথে কোনও প্রত্যন্ত শাখা থাকে তবে" কেন স্বয়ংক্রিয়ভাবে একটি শাখা পুনরায় তৈরি করবে "?
টিম

3

টিম: গিটটি ভিসিএস বিতরণ করা হয়, সুতরাং আপনি যখন কোনও স্থানীয় থেকে রিমোট থেকে কোনও রেপো ক্লোন করেন তখন এটি সমস্ত কিছু (ইতিহাস) ক্লোন করে দেয়। সুতরাং আপনি যখন আপনার রেপো ক্লোন করেছিলেন, তখন এটির একটি শাখা ছিল রিলিজ। যেহেতু আপনার সহকর্মী রিলিজ শাখাটি দূরবর্তীভাবে মুছে ফেলেছে, আপনি যতক্ষণ না ছাঁটাই করেন git fetch -pবা শাখাটি মুছবেন ততক্ষণ আপনার স্থানীয় লোকের সেই শাখা থাকবে।


3
ইতিমধ্যে উপস্থিত উত্তরগুলির চেয়ে এই উত্তরটি কীভাবে আলাদা?
স্টিফেন রাউচ

1

সম্ভবত কিছুটা স্পর্শকাতর তবে এই সাইটের দৃষ্টিভঙ্গি শাখাগুলি মুছে ফেলার সাধারণ বিষয়টি বুঝতে সহায়তা করতে পারে:

http://railsware.com/blog/2014/08/11/git-housekeeping-tutorial-clean-up-outdated-branches-in-local-and-remote-repositories/

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

for branch in `comm -12  <(git branch --merged|awk '{print($1)}') <(git branch -r --merged|awk '{print($1)}'|awk -F \/ '{print($2)}')`; do echo -e `git show --format="%ci %cr %an" $branch | head -n 1` \\t$branch; done | sort -r

(দুর্ভাগ্যক্রমে "দুর্দান্ত, হজমযোগ্য" এগুলি স্ক্রিপ্টগুলির বিন্যাসে প্রযোজ্য নয়))

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