git - अनपेशित गिट कमेट्स देखना




git-diff git-log (16)

मैं अपने द्वारा किए गए किसी भी स्थानीय काम को कैसे देख सकता हूं, जिसे अभी तक रिमोट रिपोजिटरी में धक्का नहीं दिया गया है? कभी-कभी, git status प्रिंट करेगा कि मेरी शाखा एक्स origin/master आगे है, लेकिन हमेशा नहीं।

क्या यह गिट के मेरे इंस्टॉलेशन के साथ एक बग है, या क्या मुझे कुछ याद आ रहा है?


अन्य सभी उत्तर "अपस्ट्रीम" (जिस शाखा से आप खींचते हैं) के बारे में बात करते हैं।
लेकिन एक स्थानीय शाखा एक अलग शाखा को धक्का दे सकती है जो इसे खींचती है।

master रिमोट ट्रैकिंग शाखा " origin/master " पर धक्का नहीं दे सकता है।
master लिए अपस्ट्रीम शाखा origin/master master हो सकती है, लेकिन यह रिमोट ट्रैकिंग शाखा origin/xxx या यहां तक ​​कि एक और anotherUpstreamRepo/yyy को धक्का दे सकती है।
वे branch.*.pushremote द्वारा निर्धारित हैं branch.*.pushremote global remote.pushDefault . global remote.pushDefault मूल्य के साथ वर्तमान शाखा के लिए global remote.pushDefault

यह रिमोट-ट्रैकिंग शाखा है जो अनचाहे काम की मांग करते समय गिना जाता है: वह जो branch at the remote ट्रैक करता है जहां स्थानीय शाखा को धकेल दिया जाएगा।
branch at the remote , फिर, origin/xxx या यहां तक ​​कि एक और anotherUpstreamRepo/yyy

गिट 2.5+ (क्यू 2 2015) इसके लिए एक नया शॉर्टकट प्रस्तुत करता है: <branch>@{push}

2 9 बीसी 885 प्रतिबद्ध करें , add5d0 प्रतिबद्ध करें , 48c5847 प्रतिबद्ध करें , a1ad0eb प्रतिबद्ध करें , e291c75 प्रतिबद्ध करें , 9 7 9 सीबी 24 प्रतिबद्ध करें , 1ca41a1 प्रतिबद्ध करें , 3a429d0 प्रतिबद्ध करें , a9f9f8c प्रतिबद्ध करें , 8770e6f प्रतिबद्ध करें , da66b27 प्रतिबद्ध करें , f052154 प्रतिबद्ध करें , 9e3751d प्रतिबद्ध करें , ee2499f प्रतिबद्ध करें [सभी 21 मई से 2015], और जेफ किंग ( peff ) द्वारा e41bf35 [01 मई 2015] प्रतिबद्ध करें
( gitster सी gitster द्वारा विलय - gitster - प्रतिबद्ध सी 4 ए 8354 , 05 जून 2015)

Commit adfe5d0 बताता है:

sha1_name : @{push} shorthand को कार्यान्वित करें

एक त्रिकोणीय वर्कफ़्लो में, प्रत्येक शाखा में रुचि के दो अलग-अलग बिंदु हो सकते हैं: @{upstream} जिसे आप आम तौर पर खींचते हैं, और वह गंतव्य जिसे आप आम तौर पर दबाते हैं। उत्तरार्द्ध के लिए कोई शॉर्टेंड नहीं है, लेकिन यह उपयोगी है।

उदाहरण के लिए, आप जानना चाहेंगे कि आपने अभी तक क्या नहीं किया है :

git log @{push}..

या एक अधिक जटिल उदाहरण के रूप में, कल्पना करें कि आप सामान्य रूप से origin/master (जिसे आपने अपने @{upstream} रूप में सेट किया है) से परिवर्तन खींचते हैं, और अपने व्यक्तिगत कांटा में परिवर्तन को धक्का देते हैं (उदाहरण के लिए, myfork/topic )।
आप कई मशीनों से अपने कांटा को दबा सकते हैं, जिससे आपको अपस्ट्रीम की बजाय पुश गंतव्य से परिवर्तनों को एकीकृत करने की आवश्यकता होती है।
इस पैच के साथ, आप बस कर सकते हैं:

git rebase @{push}

पूरा नाम टाइप करने के बजाय।

Commit 29bc885 जोड़ता है:

for-each-ref : " %(push) " प्रारूप स्वीकार करें

जैसे ही हमारे पास प्रत्येक रेफरी के लिए " @{upstream} " की रिपोर्ट करने के लिए " %(upstream) " है, यह पैच " @{push} " से मेल खाने के लिए " %(push) " जोड़ता है।
यह अपस्ट्रीम के रूप में एक ही ट्रैकिंग प्रारूप संशोधक का समर्थन करता है (क्योंकि आप जानना चाहते हैं, उदाहरण के लिए, कौन सी शाखाएं धक्का देने के लिए प्रतिबद्ध हैं )।

यदि आप देखना चाहते हैं कि शाखा की तुलना में आपकी स्थानीय शाखाएं कितनी प्रतिबद्ध हैं / पीछे हैं, तो आप इसे दबा रहे हैं:

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads

आप इसे git log साथ कर सकते हैं:

git log origin..

मान लीजिए कि origin आपके अपस्ट्रीम का नाम है, जिसके बाद कोई संशोधन नाम छोड़ दिया गया है .. इसका अर्थ है HEAD , जो नए कामों को सूचीबद्ध करता है जिन्हें धक्का नहीं दिया गया है।


इसी तरह: अनमोल शाखाओं को देखने के लिए:

git branch --all --no-merged

उन पर संदेह हो सकता है लेकिन मैं cxreg द्वारा जवाब की सिफारिश करता हूं


चीजों को करने का एक तरीका उन शाखाओं को सूचीबद्ध करना है जो एक शाखा पर उपलब्ध हैं लेकिन दूसरे नहीं।

git log ^origin/master master

मेरा मानना ​​है कि ऐसा करने का सबसे आम तरीका कुछ ऐसा करना है:

git cherry --abbrev=7 -v @{upstream}

हालांकि, मैं व्यक्तिगत रूप से चलना पसंद करता हूं:

git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..

जो सभी शाखाओं से काम करता है जो ऊपर की ओर विलय नहीं कर रहे हैं, साथ ही अपस्ट्रीम में अंतिम प्रतिबद्धता (जो अन्य सभी कामों के लिए रूट नोड के रूप में दिखाई देती है) दिखाती है। मैं इसे अक्सर इस्तेमाल करता हूं कि मैंने इसके लिए उपनाम noup बनाया है।

git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'

मेरा सुझाव है कि आप स्क्रिप्ट https://github.com/badele/gitcheck , मैंने इस स्क्रिप्ट को आपके सभी गिट रिपॉजिटरीज़ को पास करने के लिए कोड किया है, और यह दिखाता है कि किसने काम नहीं किया है और किसने धक्का नहीं दिया है।

यहां एक नमूना परिणाम


मैंने पहले किया था, किसी भी शाखा में नहीं, न ही रिमोट और न ही स्थानीय। बस प्रतिबद्धता। अन्य उत्तरों से कुछ भी मेरे लिए काम नहीं किया, लेकिन इसके साथ:

git reflog

वहां मैंने अपनी प्रतिबद्धता पाई।


यदि आप उन सभी शाखाओं पर सभी प्रतिबद्धताओं को देखना चाहते हैं जो अभी तक धक्का नहीं दिए गए हैं, तो आप इस तरह कुछ ढूंढ रहे होंगे:

git log --branches --not --remotes

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

git log --branches --not --remotes --simplify-by-decoration --decorate --oneline

यह एक बग नहीं है। जो आप शायद देख रहे हैं वह असफल ऑटो-मर्ज के बाद गिट स्थिति है जहां रिमोट से किए गए परिवर्तन लाए जाते हैं लेकिन अभी तक विलय नहीं किए जाते हैं।

स्थानीय रेपो और रिमोट के बीच की गतिविधियों को देखने के लिए यह करें:

git fetch

यह 100% सुरक्षित है और आपकी कार्यशील प्रतिलिपि नहीं बनायेगा। अगर git status में बदलाव आया तो शो X commits ahead of origin/master

अब आप रिमोट में आने वाले कामों का लॉग दिखा सकते हैं लेकिन स्थानीय में नहीं:

git log HEAD..origin


यहां मेरा पोर्टेबल समाधान (शेल स्क्रिप्ट जो विंडोज़ पर भी अतिरिक्त इंस्टॉल किए बिना काम करता है) जो सभी शाखाओं के लिए मूल से अंतर दिखाता है: git-fetch-log

एक उदाहरण आउटपुट:

==== branch [behind 1]

> commit 652b883 (origin/branch)
| Author: BimbaLaszlo <[email protected]>
| Date:   2016-03-10 09:11:11 +0100
|
|     Commit on remote
|
o commit 2304667 (branch)
  Author: BimbaLaszlo <[email protected]>
  Date:   2015-08-28 13:21:13 +0200

      Commit on local

==== master [ahead 1]

< commit 280ccf8 (master)
| Author: BimbaLaszlo <[email protected]>
| Date:   2016-03-25 21:42:55 +0100
|
|     Commit on local
|
o commit 2369465 (origin/master, origin/HEAD)
  Author: BimbaLaszlo <[email protected]>
  Date:   2016-03-10 09:02:52 +0100

      Commit on remote

==== test [ahead 1, behind 1]

< commit 83a3161 (test)
| Author: BimbaLaszlo <[email protected]>
| Date:   2016-03-25 22:50:00 +0100
|
|     Diverged from remote
|
| > commit 4aafec7 (origin/test)
|/  Author: BimbaLaszlo <[email protected]>
|   Date:   2016-03-14 10:34:28 +0100
|
|       Pushed remote
|
o commit 0fccef3
  Author: BimbaLaszlo <[email protected]>
  Date:   2015-09-03 10:33:39 +0200

      Last common commit

लॉग के लिए पारित पैरामीटर्स, उदाहरण के लिए - --oneline या - --patch का उपयोग किया जा सकता है।


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

$ easy_install --user unpushed

या

$ sudo easy_install unpushed

सिस्टम-व्यापी स्थापित करने के लिए।

उपयोग भी सरल है:

$ unpushed ~/workspace
* /home/nailgun/workspace/unpushed uncommitted (Git)
* /home/nailgun/workspace/unpushed:master unpushed (Git)
* /home/nailgun/workspace/python:new-syntax unpushed (Git)

अधिक जानकारी के लिए unpushed --help या unpushed देखें। इसमें एक cronjob स्क्रिप्ट भी unpushed-notify और अप्रशिक्षित परिवर्तनों की ऑन-स्क्रीन अधिसूचना के लिए unpushed-notify


वर्तमान शाखा में अनचाहे काम की तलाश के लिए हैंडी गिट उर्फ:

alias unpushed = !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline

यह मूल रूप से क्या करता है:

git log origin/branch..branch

लेकिन वर्तमान शाखा नाम भी निर्धारित करता है।


सभी शाखाओं में सभी अप्रशिक्षित प्रतिबद्धताओं को आसानी से सूचीबद्ध करने के लिए आप इस आदेश का उपयोग कर सकते हैं:

 git log --branches  @{u}..

git diff origin

मान लें कि आपकी शाखा मूल को ट्रैक करने के लिए सेट की गई है, फिर आपको अंतर दिखाना चाहिए।

git log origin

आपको प्रतिबद्धताओं का सारांश देगा।


git log origin/master..HEAD

आप एक ही वाक्यविन्यास का उपयोग करके diff भी देख सकते हैं

git diff origin/master..HEAD




git-log