मर्ज में छिपे बदलावों के लिए
मर्ज कमिट्स में स्वचालित रूप से उनके परिवर्तन Git लॉग आउटपुट से छिपे हुए हैं। पिकैक्स और रिवर्स-ब्लेम दोनों को परिवर्तन नहीं मिला। इसलिए जो लाइन मैं चाहता था उसे जोड़ा गया था और बाद में हटा दिया गया था और मैं उस मर्ज का पता लगाना चाहता था जिसने इसे हटा दिया। फ़ाइल git log -p -- path/file
इतिहास केवल यह जोड़ा जा रहा है दिखाया। यहाँ मुझे इसे खोजने का सबसे अच्छा तरीका है:
git log -p -U9999 -- path/file
परिवर्तन के लिए खोजें, फिर "^ कमिट" के लिए पीछे की ओर खोजें - पहला "^ कमिट" वह प्रतिबद्ध है जहां फ़ाइल में अंतिम रूप से वह लाइन थी। गायब होने के बाद दूसरा "^ कमिट" है। दूसरी प्रतिबद्धता वह हो सकती है जिसने इसे हटा दिया। -U9999
यह मानते हुए कि आपकी फ़ाइलों सभी अधिकतम 9999 लाइनें हैं पूरी फ़ाइल सामग्री (हर बार फ़ाइल बदल गया था के बाद) को दिखाने के लिए है,।
ब्रूट फोर्स के माध्यम से किसी भी संबंधित मर्ज को पाता है (प्रत्येक संभावित मर्ज को उसके पहले माता-पिता के साथ प्रतिबद्ध करें, टन के खिलाफ चलाएं)
git log --merges --pretty=format:"git diff %h^...%h | grep target_text" HEAD ^$(git merge-base A B) | sh -v 2>&1 | less
(मैंने संशोधन फ़िल्टर को और अधिक सीमित करने की कोशिश की, लेकिन मैं समस्याओं में भाग गया और यह अनुशंसा नहीं करता। मैं जो कुछ भी अलग-अलग समय पर विलय कर रहा था और A ... B में शामिल नहीं था, मुझे जो / हटाने वाले बदलाव दिख रहे थे, वे अलग-अलग शाखाओं में थे। जब परिवर्तन वास्तव में मेनलाइन में विलय हो गए।)
इन दो हिट्स के साथ एक गिट ट्री दिखाएं (और हटाए गए बहुत सारे जटिल गिट इतिहास):
git log --graph --oneline A B ^$(git merge-base A B)
(ए ऊपर की पहली प्रतिबद्धता है, बी ऊपर की दूसरी प्रतिबद्धता है)
ए और बी दोनों के इतिहास का इतिहास ए और बी दोनों का इतिहास दिखाएं।
वैकल्पिक संस्करण (नियमित Git इतिहास के पेड़ के बजाय अधिक रैखिक रूप से पथ दिखाने के लिए लगता है - हालांकि मैं नियमित git इतिहास के पेड़ को पसंद करता हूं):
git log --graph --oneline A...B
तीन, दो डॉट्स नहीं - तीन डॉट्स का अर्थ है "r1 r2 --not $ (git मर्ज-बेस --all r1 r2)। यह कमिट्स का एक सेट है जो r1 (लेफ्ट साइड) या r2 में से किसी एक (राईट) में से एक में उपलब्ध है। पक्ष), लेकिन दोनों से नहीं। " - स्रोत: "आदमी gitrevisions"
git log -S<string> /path/to/file
है कि मर्ज (संघर्ष) के दौरान हटाने को दिखाने के लिए एक-c
या-cc
साथ ही चाहता है