Git में विवादित फ़ाइलों को सूचीबद्ध करने का सबसे सरल तरीका क्या है?


692

मुझे बस विवादित फाइलों की एक सादे सूची की आवश्यकता है ।

क्या इससे कुछ सरल है:

git ls-files -u  | cut -f 2 | sort -u

या:

git ls-files -u  | awk '{print $4}' | sort | uniq

मुझे लगता है कि मैं aliasउस के लिए एक आसान सेट कर सकता हूं , हालांकि सोच रहा था कि यह कैसे पेशेवरों को करना है। मैं इसे शेल लूप लिखने के लिए उपयोग करूँगा, जैसे ऑटो-रिज़ॉल्यूशन संघर्ष आदि, शायद उस लूप को प्लग इन करके बदलें mergetool.cmd?


2
git rebase --continueसंघर्षों के साथ फाइलों को सूचीबद्ध करेगा (यदि कोई हो)
जेकॉब

git स्टेटस काफी है
अमृत ​​ए '

1
विवादित मर्ज सत्र में 'git मर्ज - कॉन्टिन्यू' सूची फाइलों को संघर्षों के साथ दिखाएगा।
जयन

git rebase --continueसंघर्षों की सूची नहीं दी, बस मुझे उन्हें ठीक करने के लिए कहा था (git संस्करण 2.21.0)
Gary

जवाबों:


1211
git diff --name-only --diff-filter=U

131
मैंने इसके लिए एक उपनाम बनाया:git config --global alias.conflicts "diff --name-only --diff-filter=U"
जिमोथी

1
@CharlesBailey, क्या मुझे कुछ याद आ रहा है? क्या है गलत के साथ git status?
पेसियर

8
@ स्पेसर, यह सिर्फ गड़बड़ है। यदि आपके पास एक लाख अपरिवर्तनीय विलय और एक परस्पर विरोधी विलय है, तो आप आउटपुट के लिए कुछ करना चाहते हैं।
xster

8
@sAguinaga: बस चलाते हैंgit conflicts
जिमोथी

1
यह संघर्ष को हल करने के बाद भी फ़ाइल दिखाना जारी रखता है। git diff --checkबेहतर काम करता है।
14:38 पर user3812377

64

git diff --check

लाइन नंबरों सहित संघर्ष मार्कर युक्त फ़ाइलों की सूची दिखाएगा ।

उदाहरण के लिए:

> git diff --check
index-localhost.html:85: leftover conflict marker
index-localhost.html:87: leftover conflict marker
index-localhost.html:89: leftover conflict marker
index.html:85: leftover conflict marker
index.html:87: leftover conflict marker
index.html:89: leftover conflict marker

स्रोत: https://ardalis.com/detect-git-conflict-markers


1
मैंने git diff --checkमुझे अन्य (कम गंभीर) समस्याओं के बारे में भी बताया है, जैसे कि व्हाट्सएप को पीछे करना, इसलिए git diff --check | grep -i conflictओपी के मामले में हो सकता है
CCJ

37

मेरे प्रश्न का उत्तर देने की कोशिश कर रहा है:

नहीं, प्रश्न में कोई भी आसान तरीका नहीं है, आउट ऑफ बॉक्स।

टाइप करने के बाद, कई बार, बस छोटे को 'git-conflicts' नाम की एक निष्पादन योग्य फ़ाइल में चिपकाया जाता है, जिसे git के लिए सुलभ बनाया जाता है, अब मैं बस git conflictsवह सूची प्राप्त कर सकता हूं जो मुझे चाहिए थी।

अपडेट: जैसा कि रिचर्ड सुझाव देते हैं, आप निष्पादन के लिए विकल्प के रूप में, एक गिट उर्फ ​​सेट कर सकते हैं

git config --global alias.conflicts '!git ls-files -u | cut -f 2 | sort -u'

उपनाम पर निष्पादन योग्य का उपयोग करने का एक फायदा यह है कि आप उस स्क्रिप्ट को टीम के सदस्यों (प्रतिनिधि के बिन डायर भाग में) के साथ साझा कर सकते हैं।


1
मैंने उस बिंदु पर भी यही महसूस किया - यह सोचकर कि नरक के लोगों को इसकी आवश्यकता कैसे नहीं है, और यह देखने के लिए कि यह कितना तुच्छ था। हालाँकि, मैं 2 साल से git का उपयोग कर रहा हूं और ईमानदारी से एक बार फिर उस "सीमा" में नहीं चला है। तो हो सकता है कि सब के बाद आम usecase का इतना नहीं है?
अंतर्ग्रहण

4
यह इतना सरल है कि आप इसके लिए एक उपनाम स्थापित कर सकते हैं git config --global alias.conflicts "!git ls-files -u | cut -f 2 | sort -u"(मतलब यह शेल कमांड चलाते हैं, बजाय सिर्फ एक गिट कमांड के)।
रिचर्ड

1
इस बात का उल्लेख करते हुए कि आप वास्तव में "डबल-कोट्स" के बजाय 'सिंगल-कोट्स' चाहते हैं। अन्यथा, !आपके शेल द्वारा व्याख्या की जाएगी:git config --global alias.conflicts '!git ls-files -u | cut -f 2 | sort -u'
umop

26

यहाँ एक मूर्ख प्रूफ तरीका है:

grep -H -r "<<<<<<< HEAD" /path/to/project/dir

9
नहीं। Git का सूचकांक अभी भी आंतरिक रूप से कुछ फाइलों को चिन्हित करेगा, क्योंकि फाइलों में पाठ मार्करों को हटाए जाने के बाद भी यह संघर्ष में है।
अलेक्जेंडर बर्ड

7
अलेक्जेंडर की टिप्पणी के साथ, यह अभी भी एक विकल्प के रूप में देखने के लिए उपयोगी है :) कृपया हटाएं नहीं।
वुडन किटी

3
या वर्तमान कामकाजी के भीतर चलाने के लिए पथ के लिए एक डॉट का उपयोग करें -grep -H -r "<<<<<<< HEAD" .
डेविड डगलस

हे, यह भी ऐसा करने का मेरा तरीका है। एक cअच्छी तरह से जोड़ने से संघर्षों की गिनती भी होती है! एक नोट यह है कि मैं झंडे का उपयोग -Hrnकरूंगा यह लाइन नंबर की जानकारी भी प्रदान करेगा।
शेलफिश

3
यदि आप regex का उपयोग कर रहे हैं, तो मैं [<=>]{7}इसके बजाय सुझाव दूंगा । (Grep -Eमें काम करने के लिए इसके लिए ध्वज की आवश्यकता हो सकती है ।) या, <{7}यदि आप मर्ज मार्करों को लटकाने से चिंतित नहीं हैं या संघर्षों को गिनना चाहते हैं। (आप उपयोग भी कर सकते हैं git grep- फिर आपको -rध्वज की आवश्यकता नहीं है ।)
celticminstrel

22

git status "संशोधित" या "नई फ़ाइल", आदि के बजाय संघर्ष करने वाली फ़ाइलों के बगल में "दोनों संशोधित" प्रदर्शित करता है


3
यह सच है। हालाँकि यह विशेष प्रश्न विवादित फ़ाइलों की एक सादे सूची के बारे में था .. यह एक XY समस्या हो सकती है (मुझे याद नहीं है कि मुझे वास्तव में उस संघर्ष सूची की आवश्यकता क्यों है, लेकिन इस तथ्य की कि मुझे इसकी आवश्यकता नहीं है क्योंकि मुझे सुझाव देना चाहिए कि मुझे चाहिए इसके बाद एक अलग दृष्टिकोण का पालन किया है। अब यकीन नहीं है .. मैं भी ऑटोरेस्पोन्डिंग जावा-आयात संघर्षों के लिए स्क्रिप्ट लिख रहा था, जिसे इस सूची की आवश्यकता थी, अर्थात गैर-संवादात्मक उपयोग) ..
inger

ओह, मैं समझ नहीं पाया था। मुझे लगा कि आप "सामान्य" उपयोग के लिए "सामान्य" सूची चाहते हैं। यही कारण है कि मैं अपने खुद के कोड और अपने स्वयं के जवाब के साथ बाहर था ... तो मुझे एहसास हुआ कि दोनों "संशोधित" बात मेरे लिए काम किया (और मुझे लगता है कि आप सिर्फ मेरे जैसे ही चाहते थे, आपको क्यों नहीं चाहिए? -; पी) अपवोट के लिए धन्यवाद हालांकि :)
राफा

17
git status --short | grep "^UU "

4
नोट: आपको ^ UA और ^ UD के लिए भी खोज करने की आवश्यकता हो सकती है, इसलिए निम्न पैटर्न अधिक पूर्ण है: "^ U [UAD]"
mda

या बस ^Uसब कुछ पाने के लिए U
Ascherer

7
यह पर्याप्त नहीं है। विरोधाभासी फ़ाइलों में निम्नलिखित संयोजन हो सकते हैं:DD, AU, UD, UA, DU, AA, UU
एंथोनी सॉटाइल

1
@AnthonySottile: क्या आप परिदृश्यों की व्याख्या कर सकते हैं? मैंने पोस्ट किया कि मेरे मामले के लिए क्या काम किया।
मदा

@ एमडीए एक उदाहरण: संघर्ष जहां ऊपर की ओर संशोधित है, मैंने हटा दिया है स्थितिDU
एंथनी सॉटाइल

13

यह मेरे लिए काम करता है:

git grep '<<<<<<< HEAD'

या

git grep '<<<<<<< HEAD' | less -N


2
संघर्ष में संशोधित बनाम हटाई गई फ़ाइलें शामिल हो सकती हैं जो इस समाधान को कवर नहीं करेंगी।
7:11 पर Mär


3

यदि आप प्रतिबद्ध होने का प्रयास करते हैं, और यदि संघर्ष होते हैं, तो गिट आपको वर्तमान में अनसुलझे संघर्षों की सूची देगा ... लेकिन एक सादे सूची के रूप में नहीं। यह आमतौर पर वही होता है जो आप अंतःक्रियात्मक रूप से काम करते समय चाहते हैं क्योंकि सूची टकराव को ठीक करते हुए छोटी हो जाती है।


2
"अंतःक्रियात्मक रूप से क्योंकि सूची छोटी हो जाती है क्योंकि आप संघर्षों को ठीक करते हैं।" दिलचस्प। मैंने हमेशा उस उद्देश्य के लिए मेरिजेट का उपयोग किया है।
अंतर्ग्रहण

3

हो सकता है कि इसे Git में जोड़ दिया गया हो, लेकिन जिन फ़ाइलों को अभी तक सुलझाया जाना है वे स्टेटस मैसेज (git स्टेटस) में सूचीबद्ध हैं जैसे:

#
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      syssw/target/libs/makefile
#

ध्यान दें कि यह Unmerged पाथ सेक्शन है।


1

यह मानते हुए कि आपका git रूट डायरेक्टरी, $ {GIT_ROOT} कहां है, आप कर सकते हैं,

 cat ${GIT_ROOT}/.git/MERGE_MSG | sed '1,/Conflicts/d'

0

मैंने हमेशा सिर्फ इस्तेमाल किया है git status

awkकेवल फ़ाइल नाम पाने के लिए अंत में जोड़ सकते हैं

git status -s | grep ^U | awk '{print $2}'


0

मेरे 2 सेंट यहां (यहां तक ​​कि जब बहुत अच्छे / कामकाजी प्रतिक्रियाएं हैं)

मैंने अपने में यह उपनाम बनाया है .gitconfig

[alias]
 ...
 conflicts = !git diff --name-only --diff-filter=U | grep -oE '[^/ ]+$'

जो मुझे सिर्फ संघर्ष के साथ फाइलों के नाम दिखाने जा रहा है ... उनका पूरा रास्ता नहीं :)


0

यहाँ मैं एक सूची संशोधित फ़ाइलों का उपयोग बश में कमांड लाइन प्रतिस्थापन के लिए उपयुक्त करता हूँ

git diff --numstat -b -w | grep ^[1-9] | cut -f 3

सूची का उपयोग करने के लिए $(cmd)प्रतिस्थापन का उपयोग करें ।

vi $(git diff --numstat -b -w | grep ^[1-9] | cut -f 3)

फ़ाइल नाम में स्थान है, तो काम नहीं करता है। मैंने sedरिक्त स्थान से बचने या उद्धरण करने के लिए उपयोग करने की कोशिश की और आउटपुट सूची सही $()दिखी , लेकिन प्रतिस्थापन अभी भी वांछित व्यवहार नहीं किया।


0

उपयोगिता Git जादूगर https://github.com/makelinux/git-wizard अलग अनसुलझे विरोध हुआ परिवर्तन (टक्कर) और मर्ज ना किए गए फ़ाइलों गिना जाता है। संघर्ष को मैन्युअल रूप से या मेरिजेट के साथ हल किया जाना चाहिए। हल किए गए अनमैरिड परिवर्तन मुझे जोड़ सकते हैं और आमतौर पर git rebase --continue के साथ प्रतिबद्ध होते हैं।


-1

चार्ल्स बैली के उत्तर की थोड़ी भिन्नता जो अधिक जानकारी देती है:

git diff --name-only --diff-filter=U | xargs git status

-2

जैसा कि अन्य उत्तर में दर्शाया गया है, हम केवल कमांड गिट स्थिति का उपयोग कर सकते हैं और फिर अनमैरिड पथ के तहत सूचीबद्ध फाइलों की तलाश कर सकते हैं:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.