गिट पुल के बाद विस्तार से बदलाव


130

गिट पुल के बाद, इसका आउटपुट परिवर्तन राशि पर एक सारांश देता है।

मैं प्रत्येक या कुछ फ़ाइलों को विस्तृत परिवर्तन कैसे देख सकता हूं?

ठीक है, यहां मेरा सवाल जेफ्रोमी से है:

  1. मुझे कैसे पता चलेगा कि मैं मास्टर को खींच रहा हूं? मैंने जो कुछ किया वह "गिट पुल" है।

  2. मास्टर क्या इंगित करता है और Git के दो डिफ़ॉल्ट प्रमुखों में गुरु और HEAD के बीच क्या अंतर है?

  3. मैं किसी विशिष्ट फ़ाइल में विस्तृत परिवर्तन कैसे देख सकता हूँ?

  4. मैं सारांश आउटपुट में अंतिम git pullबार फिर से बदलाव कैसे देख सकता हूँ ?

  5. बीच क्या अंतर है git diffऔर git whatchanged?


4
ठीक है, संपादन के माध्यम से नए प्रश्नों का यह दोहराया जाना बिल्कुल वैसा नहीं है जैसा कि सिस्टम का उपयोग करने का इरादा है। आप मैन पेजों को देखकर या सिर्फ चीजों को आजमाकर बहुत ही आसानी से अपने सवालों का जवाब दे सकते हैं। उदाहरण के लिए, git diffस्पष्ट रूप से एक अंतर को आउटपुट करता है, जबकि git whatchangedस्पष्ट रूप से प्रतिबद्ध जानकारी की एक सूची को आउटपुट करता है, प्रत्येक में फ़ाइलों की सूची वाली सूची होती है।
कास्केलेब

शायद अपने कम प्रतिनिधि के कारण।
TED

@ यह टिप्पणी करने के लिए केवल 50 प्रतिनिधि लगते हैं, और 15 को अपवोट करते हैं।
Cascabel

उबंटू के साथ मेरे लैपटॉप पर, यह कभी-कभी काम करता है। मुझे अस्थायी रूप से सेंटोस के साथ एक और कंप्यूटर मिला है और यह टिप्पणी कर रहा हूं। दोनों कंप्यूटरों पर मैं फ़ायरफ़ॉक्स का उपयोग कर रहा हूँ।
टिम

बहुत अजीब। आप मेटा को हेड करना चाहते हैं और देख सकते हैं कि यह एक ज्ञात समस्या है / रिपोर्ट करें।
Cascabel

जवाबों:


204

मान लीजिए कि आप गुरु के पास जा रहे हैं। आप की पिछली स्थिति का उल्लेख कर सकते masterद्वारा master@{1}(यहां तक कि या master@{10.minutes.ago}; की निर्दिष्ट संशोधन खंड देखें Git-राजस्व-पार्स आदमी पेज ) है, तो आप की तरह कर सकते हैं कि

  • सभी परिवर्तन देखें: git diff master@{1} master

  • किसी फ़ाइल में परिवर्तन देखें: git diff master@{1} master <file>

  • दी गई निर्देशिका के भीतर सभी परिवर्तन देखें: git diff master@{1} master <dir>

  • परिवर्तनों का सारांश फिर से देखें: git diff --stat master@{1} master

के रूप में अपने प्रश्न के लिए "मुझे कैसे पता चलेगा कि मैं मास्टर हूँ" ... ठीक है, शाखाओं का उपयोग करना Git वर्कफ़्लो का एक महत्वपूर्ण हिस्सा है। आपको हमेशा पता होना चाहिए कि आप किस शाखा पर हैं - यदि आपने परिवर्तनों को खींच लिया है, तो आप उन्हें सही शाखा में खींचना चाहते हैं! आप सभी शाखाओं की सूची देख सकते हैं, वर्तमान में चेक-आउट के द्वारा एक कमांड के साथ, कमांड के साथ git branch। के उत्पादन के साथ-साथ वर्तमान शाखा का नाम भी छपा है git status। मैं अत्यधिक उपयोग करने के लिए आदेशों के मैन पेजों को कम करने की सलाह देता हूं - यह धीरे-धीरे कुछ ज्ञान लेने का एक शानदार तरीका है।

और आपका अंतिम प्रश्न: HEADवर्तमान में जाँच की गई शाखा का नाम है। आप वास्तव में HEADऔर HEAD@{1}इस संदर्भ में भी उपयोग कर सकते हैं , लेकिन शाखाओं का उपयोग करने के लिए यह थोड़ा अधिक मजबूत है, क्योंकि आप जाते हैं और किसी अन्य शाखा की जांच करते हैं। HEADअब वह दूसरी शाखा है, और HEAD@{1}अब है master- वह नहीं जो आप चाहते हैं!

इस तरह के बहुत से छोटे सवाल पूछने के लिए, आपको शायद एक Git ट्यूटोरियल देखना चाहिए। उदाहरण के लिए, वेब पर एक मिलियन हैं:


5
यह मेरे समाधान से बेहतर है :)
क्रिस्चियन Oudard

2
मुझे पता है कि यह पुराना है, लेकिन ... इसके आसपास दूसरा रास्ता होना चाहिए: git diff master@{1} masterअन्यथा परिवर्तन "पीछे की ओर" दिखाया जाता है, अर्थात सम्मिलन विलोपन आदि हो जाते हैं
अल्ट्राप्रेसीडियन

2
git diff master@{1} masterमेरे लिए काम करने के बजाय मेरे लिए काम नहीं git diff master~1 masterकिया।
unrealsoul007

5
@ unrealsoul007 तब आपकी स्थिति अलग थी। मास्टर ~ 1 एक मास्टर के वर्तमान में इंगित करने के लिए माता-पिता की प्रतिबद्धता है; आप केवल उस कमिट के लिए अंतर देखने जा रहे हैं। मास्टर @ {1} पिछले प्रतिबद्ध मास्टर को इंगित किया गया है; यदि उदाहरण के लिए आपने अभी-अभी खींचा है, तो यहां बताए अनुसार खींचने से पहले मास्टर की स्थिति होगी। यदि यह ऐसा नहीं करता है, तो आपने खींचे जाने के बाद संभवतः कुछ और किया है। git reflog masterसमझने की कोशिश करो क्या।
Cascabel

@ जेफ्रोमी fatal: ambiguous argument 'firstDesign@': unknown revision or path not in the working tree.मुझे यह त्रुटि मिलती रहती है । हालांकि git reflog फर्स्टडिजाइन में यह आउटपुट है
unrealsoul007

52

कहते हैं कि आप इस तरह से एक पुल खींचते हैं:

$ git pull
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From git@dev.example.com:reponame
   a407564..9f52bed  branchname   -> origin/branchname
Updating a407564..9f52bed
Fast forward
 .../folder/filename          |  209 ++++++++-----
 .../folder2/filename2        |  120 +++++++++++---------
 2 files changed, 210 insertions(+), 119 deletions(-)

आप संशोधन संख्याओं का उपयोग करके जो कुछ बदला है उसे देख सकते हैं:

$ git diff a407564..9f52bed

5
और आप सारांश का उपयोग कर " git diff --stat a407564..9f52bed" या सिर्फ एक सारांश के लिए प्राप्त कर सकते हैं " git diff --summary a407564..9f52bed"
जैकब नारęबस्की

14
Git के नए संस्करणों के लिए, git पुल अब उन फ़ाइलों की सूची को आउटपुट नहीं करता है जिन्हें बदल दिया गया था। इसे पाने के लिए, आपको
user10

6

1. मुझे कैसे पता चलेगा कि मैं मास्टर को खींच रहा हूं? मैंने जो कुछ किया वह "गिट पुल" है।

आदेश स्वयं इस तरह काम करता है:

git pull [options] [<repository> [<refspec>…]]

और प्रति डिफ़ॉल्ट वर्तमान शाखा को संदर्भित करता है। आप अपनी शाखाओं का उपयोग करके जांच कर सकते हैं

git branch -a

यह आपकी स्थानीय और दूरस्थ शाखाओं को उदाहरण के लिए सूचीबद्ध करेगा (इसलिए --- इसे और अधिक स्पष्ट करने के लिए स्थानीय और दूरस्थ के बीच एक विभाजक के रूप में जोड़ा गया )

*master
foo
bar
baz
---
origin/HEAD -> origin/master
origin/deploy
origin/foo
origin/master
origin/bar
remote2/foo
remote2/baz

जब आप एक दूरस्थ रेपो पर एक नज़र डालते हैं, तो आप देखेंगे कि आप क्या उल्लेख कर रहे हैं:

git remote show origin

निम्नलिखित की तरह सूची होगी:

* remote origin
  Fetch URL: ssh://git@git.example.com:12345/username/somerepo.git
  Push  URL: ssh://git@git.example.com:12345/username/somerepo.git
  HEAD branch: master
  Remote branches:
    foo    tracked
    master tracked
  Local refs configured for 'git push':
    foo    pushes to foo    (up to date)
    master pushes to master (fast-forwardable)

इसलिए यह सुनिश्चित करना काफी आसान है कि कहां से खींचकर कहां धकेलना है।

3. विशिष्ट फ़ाइल में विवरण को कैसे देखें?

4. कैसे फिर से पिछले खींच पुल द्वारा सारांश उत्पादन में परिवर्तन देखने के लिए?

सबसे आसान और सबसे सुंदर तरीका है (imo):

git diff --stat master@{1}..master --dirstat=cumulative,files

यह आपको आपके कार्य की वर्तमान स्थिति को अंतिम रूप देने के बीच के परिवर्तनों के बारे में जानकारी के दो ब्लॉक देगा। उदाहरण आउटपुट (मैंने इसे अधिक स्पष्ट बनाने के लिए आउटपुट और आउटपुट के --- बीच के रूप में जोड़ा ):--stat--dirstat

 mu-plugins/media_att_count.php                     |  0
 mu-plugins/phpinfo.php                             |  0
 mu-plugins/template_debug.php                      |  0
 themes/dev/archive.php                             |  0
 themes/dev/category.php                            | 42 ++++++++++++++++++
 .../page_templates/foo_template.php                |  0
 themes/dev/style.css                               |  0
 themes/dev/tag.php                                 | 44 +++++++++++++++++++
 themes/dev/taxonomy-post_format.php                | 41 +++++++++++++++++
 themes/dev/template_parts/bar_template.php         |  0
 themes/someproject/template_wrappers/loop_foo.php  | 51 ++++++++++++++++++++++
---
 11 files changed, 178 insertions(+)
  71.3% themes/dev/
  28.6% themes/someproject/template_wrappers/
 100.0% themes/
  27.2% mu-plugins/
   9.0% themes/dev/page_templates/
   9.0% themes/dev/template_parts/
  63.6% themes/dev/
   9.0% themes/someproject/template_wrappers/
  72.7% themes/

2

इस तरह hacky की तरह है, लेकिन यह आप की तरह ग्राफिकल उपकरण का उपयोग करने की अनुमति देंगे gitkया gitgया git-gui:

git pull
git reset HEAD@{1}
gitg (or gitk or whatever tool you like)

सबसे upvotes के साथ उत्तर गिट टूल का उपयोग करने का सबसे अच्छा तरीका देता है, लेकिन मैं इस पद्धति का उपयोग करता हूं क्योंकि मैं जीयूआई के साथ टूल का उपयोग परिवर्तनों को देखने के लिए कर सकता हूं: पी

फिर मैं एक git checkout .और फिर करने का अतिरिक्त कदम git pullउठाऊंगा, ताकि मैं ठीक से खींच और विलीन हो जाऊं, लेकिन मैं अतिरिक्त दो चरणों से निपटने के लिए जीयूआई में अंतर की जांच करने की क्षमता को महत्व देता हूं।

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