मैं git में शाखाओं के बीच प्रतिबद्ध अंतर कैसे देखूँ?


341

मैं शाखा-एक्स पर हूं और इसके शीर्ष पर एक जोड़े को और जोड़ देता हूं। मैं MASTER और शाखा के बीच के सभी अंतरों को देखना चाहता हूं जो मैं कमिट्स के संदर्भ में हूं। मैं बस एक कर सकता है

git checkout master
git log

और फिर ए

git checkout branch-X
git log

और नेत्रहीन इसे अलग करते हैं, लेकिन मैं एक आसान, कम त्रुटि-प्रवण विधि की उम्मीद कर रहा हूं।


जवाबों:


324

आप वास्तव में अच्छा, दृश्य उत्पादन प्राप्त कर सकते हैं कि आपकी शाखाएं इसके साथ कैसे भिन्न होती हैं

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X

13
यह आपको शाखाओं के बीच अंतर नहीं दिखाएगा, जो कि पूछा जा रहा है।
पाब्लो फर्नांडीज ने

48
git log --oneline --graph --all --decorate --abbrev-commitआपको एक छोटे / अधिक पठनीय कमांड में एक समान आउटपुट देगा
पाब्लो फर्नांडीज एड़ी

4
मुझे यह पसंद है:git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'
एवरी

6
बेहद अधूरा।
शॉन एर्खर्ट

12
git log --oneline --graph --all --decorateपर्याप्त है, --abbrev-commitआवश्यक नहीं है, के --onelineलिए कम है--pretty=oneline --abbrev-commit
एवमोहन

720

आप आसानी से ऐसा कर सकते हैं

git log master..branch-X

यह दिखाएगा कि आपको लगता है कि शाखा-एक्स में है, लेकिन मास्टर नहीं है।


9
क्या कोई विकल्प है अगर दोनों शाखाओं में यह होता है कि दूसरा नहीं है? अभी, आपको तर्कों को पलटना होगा और यह देखना होगा कि दोनों तरीके अन्य शाखा में शामिल नहीं हैं।
इलियट वध

38
यदि आप पहले से ही स्विच कर चुके हैं, तो आप branch-Xउपयोग कर सकते हैंgit log master..
डेव

8
@ElliottSlaughter: यदि आप ऐसा कमिटमेंट ढूंढना चाहते हैं जो या तो मास्टर या ब्रांच-एक्स में हो, लेकिन दोनों में नहीं, तो आप git log master...branch-X(दो के बजाय तीन डॉट्स) का उपयोग कर सकते हैं । man gitrevisionsअधिक जानकारी के लिए देखें ।
जेवियर टी।

3
इसका वास्तव में केवल आधा उत्तर है। मास्टर में कोई भी
कमी

9
यदि कॉम को शाखा-एक्स से मास्टर करने के लिए चेरी-चुना गया है तो यह उन्हें फ़िल्टर नहीं करेगा। वे अभी भी "इन-ब्रांच-एक्स लेकिन मास्टर पर नहीं" के कमिट की सूची में होंगे, भले ही वे वास्तव में दोनों में हों ..
टफवर्थ

87

मुझे लगता है कि यह पसंद और संदर्भ की बात है। मैं उपयोग करना पसंद करता हूं

git log origin/master..origin/develop --oneline --no-merges

यह विकसित होने में कमिट्स प्रदर्शित करेगा जो मास्टर ब्रांच में नहीं हैं।

यदि आप देखना चाहते हैं कि कौन सी फाइलें वास्तव में संशोधित उपयोग हैं

git diff --stat origin/master..origin/develop --no-merges

यदि आप तर्क निर्दिष्ट नहीं करते हैं तो यह पूर्ण अंतर प्रदर्शित करेगा। यदि आप दृश्य अंतर देखना चाहते हैं, तो meldलिनक्स WinMergeपर या खिड़कियों पर स्थापित करें । सुनिश्चित करें कि वे डिफ़ॉल्ट difftools हैं। फिर जैसे कुछ का उपयोग करें

git difftool -y origin/master..origin/develop --no-merges

मामले में आप इसे वर्तमान शाखा के साथ तुलना करना चाहते हैं। उपयोग की तरह शाखा नाम के बजाय HEAD का उपयोग करना अधिक सुविधाजनक है:

git fetch
git log origin/master..HEAD --oneline --no-merges

यह आपको सभी कमिट्स दिखाएगा, जो विलय के बारे में हैं


1
यदि आप एक रिलीज़ शाखा की तुलना करते हैं जिसमें विलय हो सकता है। आप परम की मदद से मर्ज के कमिट (जो किसी भी मूल्य को नहीं जोड़ते) को हटा सकते हैं --no-mergesजैसे:git log origin/master..HEAD --oneline --no-merges
claudiu.f.marginean

15

यदि आप लिनक्स पर हैं, gitgतो इसे बहुत जल्दी और ग्राफिक रूप से करने का तरीका है।

यदि आप कमांड लाइन पर जोर देते हैं तो आप उपयोग कर सकते हैं:

git log --oneline --decorate

git logडिफ़ॉल्ट रूप से अच्छे बनाने के लिए , मैं आमतौर पर इन वैश्विक प्राथमिकताओं को निर्धारित करता हूं:

git config --global log.decorate true
git config --global log.abbrevCommit true

14

मैं "कमिट्स" में अंतर देखने के लिए निम्नलिखित सुझाव दूंगा। सममित अंतर के लिए, उल्टे आर्गों के साथ कमांड दोहराएं:

git cherry -v master [your branch, or HEAD as default]

क्या यह गिट मास्टर..ब्रांच-एक्स से अलग है?
ilmirons

2
ज़रूर, "गिट चेरी" स्मार्ट है: यह "कमिट्स" से "पैच / डिफरेंशियल" में तब्दील होता है और एक "पैच" की रिपोर्टिंग से बच सकता है जो दोनों शाखाओं पर है लेकिन अलग-अलग क्रम में लागू होता है।
mmaruska

8

अगर आप gitk का उपयोग करना चाहते हैं:

gitk master..branch-X

यह एक अच्छा पुराना स्कूल GUI है


4

सही उत्तर नहीं है लेकिन गितुब का उपयोग करने वाले लोगों के लिए बेहतर काम करता है :

यहां छवि विवरण दर्ज करें

अपने रेपो में जाएं: Insights -> Network


साथ ही, पुल अनुरोध बनाने से शाखा अंतर भी दिखाई देगा।
pkamb 21

OMG मैं आपको गले लगाना चाहता हूं।
Esseara

@ देसीरा मैं एक बहुत बड़ा हगामर हूं :)) आपका स्वागत है: डी
एयॉन

2

यदि आप प्रतिबद्ध संदेशों के आधार पर तुलना करना चाहते हैं, तो आप निम्न कार्य कर सकते हैं:

git fetch
git log --oneline origin/master | cut -d' ' -f2- > master_log
git log --oneline origin/branch-X | cut -d' ' -f2- > branchx_log
diff <(sort master_log) <(sort branchx_log)

1
इसके बजाय का उपयोग करने का --onelineऔर पाइपिंग के लिए cutआप उपयोग कर सकते हैंgit log --format='%s'
opticyclic

0
#! /bin/bash
if ((2==$#)); then
  a=$1
  b=$2
  alog=$(echo $a | tr '/' '-').log
  blog=$(echo $b | tr '/' '-').log
  git log --oneline $a > $alog
  git log --oneline $b > $blog
  diff $alog $blog
fi

यदि आप एक दृश्य अंतर उपकरण है, तो यह एक और बी लॉग नेत्रहीन, कंधे से कंधा मिलाकर चलने की अनुमति देता है। दृश्य भिन्न टूल को शुरू करने के लिए कमांड के साथ अंत में कमांड को बदलें।


0

मैंने कुछ उत्तरों का उपयोग किया और एक पाया कि मेरा मामला फिट है (सुनिश्चित करें कि सभी कार्य रिलीज़ शाखा में हैं)।

अन्य विधियां भी काम करती हैं, लेकिन मैंने पाया कि वे ऐसी लाइनें जोड़ सकते हैं जिनकी मुझे आवश्यकता नहीं है, जैसे मर्ज कमिट जो कोई मूल्य नहीं जोड़ता है।

git fetch
git log origin/master..origin/release-1.1 --oneline --no-merges

या आप अपने वर्तमान की तुलना गुरु से कर सकते हैं

git fetch
git log origin/master..HEAD --oneline --no-merges

git fetch यह सुनिश्चित करने के लिए कि आप अद्यतन जानकारी का उपयोग कर रहे हैं।

इस तरह प्रत्येक कमिट एक लाइन पर होगी और आप उसे कॉपी / पेस्ट कर सकते हैं और एक टेक्स्ट एडिटर में डाल सकते हैं और उन कामों की तुलना करना शुरू कर देंगे जिन्हें मर्ज किया जाएगा।

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