গিটের সাথে, আমি কীভাবে বলতে পারি যে আমার শাখায় যদি কোনও প্রতিশ্রুতিবদ্ধ অন্য কোনও প্রতিশ্রুতির বংশধর হয়?
--is-ancestorসমাধান সমাধান পছন্দ করে ।
গিটের সাথে, আমি কীভাবে বলতে পারি যে আমার শাখায় যদি কোনও প্রতিশ্রুতিবদ্ধ অন্য কোনও প্রতিশ্রুতির বংশধর হয়?
--is-ancestorসমাধান সমাধান পছন্দ করে ।
উত্তর:
আপনি যদি এই প্রোগ্রামটিমেটিকভাবে পরীক্ষা করতে চান (যেমন স্ক্রিপ্টে), আপনি git merge-base A Bএটি সমান কিনা তা পরীক্ষা করতে পারেন git rev-parse --verify A(তবে A বি থেকে পৌঁছনীয়), বা যদি এটি হয় git rev-parse --verify B(তবে বি এ থেকে পৌঁছনীয়)। git rev-parseএখানে প্রতিশ্রুতিবদ্ধ নাম থেকে SHA-1 / কমিট আইডিতে রূপান্তর করা প্রয়োজন।
ভনসির উত্তরেরgit rev-list মতো ব্যবহার করাও সম্ভাবনা।
সম্পাদনা করুন: আধুনিক গিটের আকারে এই কোয়েরির জন্য সুস্পষ্ট সমর্থন রয়েছে git merge-base --is-ancestor।
আপনি যে কমান্ডগুলির বিষয়ে জিজ্ঞাসা করছেন সেগুলির মধ্যে যদি কোনও শাখার টিপ হয় , তবে git branch --contains <commit>বা git branch --merged <commit>আরও প্রোগ্রামহীন সমাধান হতে পারে।
git checkout -b quickcheck <more-recent-commit-ID>এবং তারপরে git branch --contains <older-commit-ID>(এবং তারপরে git branch -D quickcheckঅস্থায়ী শাখা থেকে মুক্তি পাওয়ার জন্য)।
git merge-base --is-ancestor2 বছর দ্বারা পূর্বাভাস দেয় ।
git branch --contains <commit>এবং git merge-base --is-ancestor ...3m40s বনাম 0.14 এস তুলনা করেছি
গিট ১.৮.০ থেকে এটি বিকল্প হিসাবে সমর্থিত merge-base:
git merge-base --is-ancestor <maybe-ancestor-commit> <descendant-commit>
ম্যান পৃষ্ঠা থেকে:
--is-পূর্বপুরুষ
প্রথমটি দ্বিতীয়টির পূর্বপুরুষ কিনা তা পরীক্ষা করে দেখুন এবং মানটি যদি 0 হয় তবে স্ট্যাটাস 1 বা প্রস্থান না করে প্রস্থান করুন। ত্রুটিগুলি একটি শূন্য নয় এমন স্থিতি দ্বারা সংকেতিত হয় যা 1 নয়।
উদাহরণ স্বরূপ:
git merge-base --is-ancestor origin/master master; echo $?
git merge-base THING --is-ancestor OF_THING && echo yes || echo noযেমন:git merge-base my-feature-branch --is-ancestor master && echo yes || echo no
git merge-base --is-ancestor -- commit commitআমার পাশের হ্যাশগুলির জন্য git২.১.৪ (ডেবিয়ান / ডিভুয়ান 7..১০ জেসি) এবং ১.৯.১ (উবুন্টু ১৪.০৪ বিশ্বস্ত) নিয়ে কাজ করে যা এখন প্রাচীন are এটি ডেবিয়ান হুইজি এমনকি আপনার জন্য কাজ করে sudo apt-get install git/wheezy-backports।
এই ধরণের ক্রিয়াকলাপ এসও প্রশ্নে বিশদ সংশোধিত পরিসীমা ধারণার উপর নির্ভর করে : " 'গিট লগ উত্স / মাস্টার' বনাম 'গিট লগ উত্স / মাস্টার ..' "।
git rev-list যদি পৌঁছনীয় হয় তবে অন্য একটি প্রতিশ্রুতি থেকে ফিরে হাঁটাতে সক্ষম হওয়া উচিত।
সুতরাং আমি চেষ্টা করব:
git rev-list --boundary 85e54e2408..0815fcf18a
0815fcf18a19441c1c26fc3495c4047cf59a06b9
8a1658147a460a0230fb1990f0bc61130ab624b2
-85e54e240836e6efb46978e4a1780f0b45516b20
(সীমানা সংক্রান্ত কমিটিগুলির সাথে উপসর্গ রয়েছে -)
যদি প্রদর্শিত শেষ প্রতিশ্রুতি git rev-listকমান্ডের প্রথম কমিটের সমান হয় , তবে এটি দ্বিতীয় প্রতিশ্রুতি থেকে পৌঁছনীয় একটি প্রতিশ্রুতি।
যদি প্রথম প্রতিশ্রুতি দ্বিতীয়টি থেকে পৌঁছনীয় না হয় তবে git rev-listকিছুই ফিরিয়ে দেওয়া উচিত নয়।
git rev-list --boundary A..B
Aযদি Aপৌঁছতে পারে তবে এর মাধ্যমে শেষ হবে B।
এটি একই হিসাবে:
git rev-list --boundary B --not A
, Bএকটি ইতিবাচক উল্লেখ এবং Aএকটি নেতিবাচক রেফারেন্স সহ ।
এটা শুরু হয় এ হবে Bএবং গ্রাফ মাধ্যমে ফিরে পদচারনা পর্যন্ত এটি একটি পুনর্বিবেচনা থেকে যোগাযোগ করা যাবে encounters A।
আমি যুক্তি দিয়ে বলব যে যদি Aসরাসরি পৌঁছতে Bপারে তবে এটির মুখোমুখি হবে (এবং প্রদর্শিত কারণ, --boundaryবিকল্পটির কারণে ) A।
-85e54e2...স্নিপেটে একটি বিয়োগ কেন হয় ? একটি সম্ভাব্য টাইপও: "... প্রথম প্রতিশ্রুতি তুলনায় একই ..."
-অর্থ এটি একটি সীমানা অঙ্গীকার। আমি আরও পরিষ্কার করে দেওয়ার জন্য উত্তরটি সম্পাদনা করেছি, পাশাপাশি ডক লিঙ্কগুলি রিফ্রেশ করতে এবং এই 5 বছরের পুরানো উত্তরের জন্য টাইপও ঠিক করেছি।
অন্য উপায় ব্যবহার git logএবং হবে grep।
git log --pretty=format:%H abc123 | grep def456
প্রতিশ্রুতি Def456 কমিট abc123 এর পূর্বপুরুষ, বা অন্যথায় আউটপুট না থাকলে এটি আউটপুটের এক লাইন উত্পাদন করে।
আপনি সাধারণত --prettyযুক্তি বাদ দিয়ে দূরে সরে যেতে পারেন , তবে আপনি যদি নিশ্চিত হয়ে থাকেন যে আপনি কেবল আসল প্রতিশ্রুতিবদ্ধ হ্যাশগুলির মাধ্যমে অনুসন্ধান করেছেন তবে লগ মন্তব্য এবং এর মাধ্যমে নয়।
--prettyআমি পরিবর্তেgit log --oneline ce2ee3d | grep ec219cc
https://stackoverflow.com/a/13526591/895245 এটিকে আরও মানব বান্ধব করে তুলতে এখন উল্লেখ করেছে:
git-is-ancestor() (
if git merge-base --is-ancestor "$1" "$2"; then
echo 'ancestor'
elif git merge-base --is-ancestor "$2" "$1"; then
echo 'descendant'
else
echo 'unrelated'
fi
)
alias giia='git-is-ancestor'
গিট শো-শাখা শাখা- sha1 কমিট- sha1
কোথায়:
আপনি যদি ব্যবহার করছেন git merge-base --is-ancestor ব্যবহার করছেন তবে গিট ২.২৮ (Q3 2020) ব্যবহার নিশ্চিত করুন
গিট 2.28 (কিউ 32020) এর সাথে, " struct commit" এর কয়েকটি ক্ষেত্র যা সর্বদা উপস্থিত থাকতে হবে না স্ল্যাব দেওয়ার জন্য সরানো হয়েছে।
দেখুন প্রতিশ্রুতি c752ad0 , প্রতিশ্রুতি c49c82a , প্রতিশ্রুতি 4844812 , প্রতিশ্রুতি 6da43d9 (17 জুন 2020) অভিষেক কুমারabhishekkumar2718 দ্বারা ( ) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট d80bea4 , 06 জুলাই 2020)
commit-graph: পরিচয় করিয়ে দিনcommit_graph_data_slabস্বাক্ষরিত: অভিষেক কুমার
কাঠামোবদ্ধ প্রতিশ্রুতি অনেক প্রসঙ্গে ব্যবহৃত হয়। তবে, সদস্য
generationএবংgraph_posকেবল প্রতিশ্রুতি গ্রাফ সম্পর্কিত ক্রিয়াকলাপ এবং অন্যথায় মেমরির অপচয় করতে ব্যবহৃত হয়।এই বর্জ্যটি আরও স্পষ্ট হয়ে উঠত কারণ আমরা প্রজন্মের নম্বর ভি 2 তে স্থানান্তরিত করেছি, যা বর্তমান 32-বিটের পরিবর্তে 64-বিট জেনারেশন নম্বর ব্যবহার করে।
যেহেতু এগুলি প্রায়শই একসাথে অ্যাক্সেস করা হয়, আসুন আমরা স্ট্রাক্টটি প্রবর্তন করি
commit_graph_dataএবং এগুলিকে একটিcommit_graph_dataস্ল্যাবে স্থানান্তর করি ।সামগ্রিক পরীক্ষার স্যুট যেমন চলবে তত দ্রুত
masterচলেছে (সিরিজ: 26 মি 48master,: 27 এম 34 এস, দ্রুত 2.87%), সেশেদর গ্যাবার আবিষ্কার করে কিছু নির্দিষ্ট কমান্ডgit merge-base --is-ancestor40% ধীর করে দিয়েছিল ।
কমিট-স্ল্যাব অ্যাক্সেস হ্রাস করার পরে, ধীর গতি অব্যাহত থাকে তবে 20% এর কাছাকাছি থাকে।ডেরিক স্টোলি বিশ্বাস করেন যে স্লো ডাউন ডাউনটি অন্তর্নিহিত অ্যালগরিদমকে দায়বদ্ধ করে তুলবে কমিট স্ল্যাব অ্যাক্সেসের স্লোনেসের চেয়ে এবং আমরা পরবর্তী সিরিজে ফলো-আপ করব।
আপনার যদি সংগ্রহস্থলের সমস্ত ট্যাগের জন্য এটি করতে হয় তবে এটির উত্তরের উপর ভিত্তি করে তৈরি করুন:
for i in `git tag` ; do echo -ne $i "\t" ; git log --pretty=format:%H $i | (grep <commit to find> || echo ""); done