নিম্নলিখিত শেল কমান্ডটি যা চায় তা করা উচিত:
git log --all --not $(git rev-list --no-walk --exclude=refs/heads/mybranch --all)
আদেশ সহকারে
যদি আপনি mybranchচেক আউট করে থাকেন তবে উপরের কমান্ডটি কাজ করবে না। এটি কারণ যে প্রতিশ্রুতিগুলিও mybranchসেগুলির মাধ্যমে পৌঁছানো যায় HEADতাই গিট কমিটগুলি অনন্য বলে মনে করে না mybranch। mybranchচেক আউট হয়ে গেলে এটি কাজ করার জন্য , আপনাকে অবশ্যই এর জন্য একটি বর্জন যুক্ত করতে হবে HEAD:
git log --all --not $(git rev-list --no-walk \
--exclude=refs/heads/mybranch \
--exclude=HEAD \
--all)
তবে, যদি না চেক আউট করা হয় HEADতবে আপনার বাদ দেওয়া উচিত নয়mybranch , অন্যথায় আপনি এমন কমিটগুলি দেখানোর ঝুঁকি নিতে পারেন যা সীমাবদ্ধ নয় mybranch।
একইভাবে, আপনার যদি origin/mybranchস্থানীয় কোনও শাখার সাথে মিলেমিশ্রিত একটি প্রত্যন্ত mybranchশাখা থাকে, আপনাকে এটিকে বাদ দিতে হবে:
git log --all --not $(git rev-list --no-walk \
--exclude=refs/heads/mybranch \
--exclude=refs/remotes/origin/mybranch \
--all)
এবং যদি রিমোট শাখাটি দূরবর্তী সংগ্রহস্থলের জন্য ডিফল্ট শাখা হয় (সাধারণত কেবল origin/masterএটির জন্য সত্য ) তবে আপনাকেও বাদ দিতে হবে origin/HEAD:
git log --all --not $(git rev-list --no-walk \
--exclude=refs/heads/mybranch \
--exclude=refs/remotes/origin/mybranch \
--exclude=refs/remotes/origin/HEAD \
--all)
যদি আপনার শাখাটি চেক আউট হয়ে থাকে এবং একটি দূরবর্তী শাখা থাকে এবং দূরবর্তী শাখাটি দূরবর্তী সংগ্রহস্থলের জন্য ডিফল্ট হয়, তবে আপনি অনেকগুলি বাদ দিয়ে শেষ করবেন:
git log --all --not $(git rev-list --no-walk \
--exclude=refs/heads/mybranch \
--exclude=HEAD
--exclude=refs/remotes/origin/mybranch \
--exclude=refs/remotes/origin/HEAD \
--all)
ব্যাখ্যা
git rev-listকমান্ড একটি নিম্ন স্তরের (নদীর গভীরতানির্ণয়) কমান্ড দেওয়া পুনর্বিবেচনা পদচারনা এবং SHA1 এ শনাক্তকারী সম্মুখীন ডাম্প হয়। git logএটিকে কেবল SHA1 shows কোনও লগ বার্তা, কোনও লেখকের নাম, কোনও টাইমস্ট্যাম্প না দেখানো সমতুল্য মনে করুন that যে কোনও "অভিনব" জিনিস নেই।
--no-walkবিকল্প, যেমন নাম থেকেই বোঝা, প্রতিরোধ git rev-listউত্পত্তি শৃঙ্খল হাঁটা থেকে। সুতরাং আপনি যদি git rev-list --no-walk mybranchএটি টাইপ করেন তবে এটি কেবল একটি SHA1 শনাক্তকারী মুদ্রণ করবে: mybranchশাখার টিপ কম্টের সনাক্তকারী ।
--exclude=refs/heads/mybranch --allআর্গুমেন্ট বলতে git rev-listছাড়া প্রতিটি রেফারেন্স থেকে শুরু করার জন্য refs/heads/mybranch।
সুতরাং, আপনি যখন চালান git rev-list --no-walk --exclude=refs/heads/mybranch --all, গিট বাদে প্রতিটি রেফের টিপ কমিটের SHA1 সনাক্তকারীকে মুদ্রণ করে refs/heads/mybranch। এই করে এবং তাদের পূর্বপুরুষদের করে আপনি হয় না ইন-এই করে আপনি না হয় আগ্রহী না দেখতে চাই।
অন্যান্য করে বেশী আপনি, দেখতে তাই আমরা আউটপুট সংগ্রহ করতে চান git rev-list --no-walk --exclude=refs/heads/mybranch --allএবং গীত বলতে সবকিছু কিন্তু যারা করে এবং তাদের পূর্বপুরুষদের দেখানোর জন্য।
--no-walkযুক্তি বৃহৎ ভান্ডার জন্য প্রয়োজনীয় (এবং ছোট ভান্ডার জন্য একটি অপ্টিমাইজেশান হল): তা ছাড়া, গীত প্রিন্ট করতে হবে, এবং শেল সংগ্রহ করতে হবে (এবং মেমরিতে স্টোর) আরো অনেক প্রয়োজনীয় তুলনায় শনাক্তকারী কমিট। বড় সংগ্রহস্থলের সাহায্যে সংগ্রহ করা কমিটের সংখ্যা সহজেই শেলের কমান্ড-লাইন আর্গুমেন্টের সীমা অতিক্রম করতে পারে।
গিট বাগ?
আমি নিম্নলিখিতটি কাজ করার আশা করতাম:
git log --all --not --exclude=refs/heads/mybranch --all
তবে তা হয় না। আমি অনুমান করছি এটি গিটের একটি বাগ, তবে সম্ভবত এটি ইচ্ছাকৃত।