किसी विशिष्ट प्रतिबद्धता के डुप्लिकेट की तलाश के लिए, यह आपके लिए काम कर सकता है।
पहले, लक्ष्य का पैच आईडी निर्धारित प्रतिबद्ध:
$ THE_COMMIT_REF_OR_SHA_YOURE_SEEKING_DUPES_OF='7a3e67c'
$ git show $THE_COMMIT_REF_OR_SHA_YOURE_SEEKING_DUPES_OF | git patch-id
f6ea51cd6acd30cd627ce1a56e2733c1777d5b52 7a3e67ce38dbef471889d9f706b9161da7dc5cf3
पहले SHA पैच-आईडी है।इसके बाद, पैच आईडी सूची हर प्रतिबद्ध के लिए और किसी भी उस मैच को फ़िल्टर: सभी एक साथ
$ for c in $(git rev-list --all); do git show $c | git patch-id; done | grep 'f6ea51cd6acd30cd627ce1a56e2733c1777d5b52'
f6ea51cd6acd30cd627ce1a56e2733c1777d5b52 5028e2b5500bd5f4637531e337e17b73f5d0c0b1
f6ea51cd6acd30cd627ce1a56e2733c1777d5b52 7a3e67ce38dbef471889d9f706b9161da7dc5cf3
f6ea51cd6acd30cd627ce1a56e2733c1777d5b52 929c66b5783a0127a7689020d70d398f095b9e00
, कुछ अतिरिक्त झंडे के साथ, और एक utility script के रूप में:
test ! -z "$1" && TARGET_COMMIT_SHA="$1" || TARGET_COMMIT_SHA="HEAD"
TARGET_COMMIT_PATCHID=$(
git show --patch-with-raw "$TARGET_COMMIT_SHA" |
git patch-id |
cut -d' ' -f1
)
MATCHING_COMMIT_SHAS=$(
for c in $(git rev-list --all); do
git show --patch-with-raw "$c" |
git patch-id
done |
fgrep "$TARGET_COMMIT_PATCHID" |
cut -d' ' -f2
)
echo "$MATCHING_COMMIT_SHAS"
उपयोग:
$ git list-dupe-commits 7a3e67c
5028e2b5500bd5f4637531e337e17b73f5d0c0b1
7a3e67ce38dbef471889d9f706b9161da7dc5cf3
929c66b5783a0127a7689020d70d398f095b9e00
यह बहुत तेजी से नहीं है, लेकिन सबसे रेपोस के लिए काम करवाने चाहिए (सिर्फ 826 प्रतिबद्ध के साथ एक रेपो और एक 158MB एक 2.4GHz पर .git निर्देशिका के लिए 36 सेकंड मापा कोर 2 डुओ)।
(1) git show
, जो git diff-tree --cc
चलाता है के बजाय, आदेश का उपयोग करना चाहिए
git diff-tree -p
अन्यथा git patch-id
नकली अशक्त SHA1 हैश उत्पन्न करता है:
स्रोत
2013-11-03 21:08:50
यह एक आकर्षक विशेषता है। जिज्ञासा से, अतीत में कितनी दूर आप देखना चाहते हैं? मैं इसके लिए कुछ रचनात्मक एकीकरण उपयोग देख सकता था (यानी "मेरे योगदानकर्ता को नहीं पता कि कैसे रिबेस करना है"), लेकिन लंबे इतिहास से यह कम प्रभावी होगा ...? – Christopher
यह मुद्दा एक शाखा के एक सप्ताह के लंबे इतिहास में दिखाई दिया, इसलिए मेरा उपयोग मामला काफी सभ्य था (गिट लॉग-पी पर्याप्त था)। पैच-आईडी टिप्पणी ने मुझे उत्सुकता दी हालांकि ... सभी इतिहास खोजना दर्दनाक हो सकता है। – bsb