Git AuthorDate, कमोडेट से अलग क्यों है?


102

मैं अपने गिट लॉग को देखता हूं और पाता हूं कि मेरे कुछ कमिट के लिए ऑथरडेट और कमेटेट थोड़ा अलग है:

commit 3a5912f90dc5227f308e99f95152fbee2301c59a
Author:     <hidden>
AuthorDate: Fri Jun 15 10:57:22 2012 +0800
Commit:     <hidden>
CommitDate: Fri Jun 15 11:14:37 2012 +0800

लेखक और कमेटी मैं ही हूं।

यह कैसे होता है? मैं दिनों के लिए हैरान हूँ।

अधिक हैं (341 में से 17 में होता है):

+------------------------------+-------------------------------+
| from_unixtime(authored_date) | from_unixtime(committed_date) |
+------------------------------+-------------------------------+
| 2012-06-15 10:57:22          | 2012-06-15 11:14:37           |
| 2012-06-15 14:39:54          | 2012-06-15 14:48:57           |
| 2012-06-19 12:28:21          | 2012-06-19 12:29:41           |
| 2012-06-21 18:16:25          | 2012-06-21 18:28:48           |
| 2012-06-26 17:30:54          | 2012-06-26 17:33:55           |
| 2012-07-13 11:41:43          | 2012-07-13 11:42:17           |
| 2012-07-13 11:56:02          | 2012-07-13 12:13:22           |
| 2012-07-13 12:05:09          | 2012-07-13 12:12:24           |
| 2012-07-12 18:38:49          | 2012-07-13 12:26:35           |
| 2012-07-13 11:00:47          | 2012-07-13 12:25:15           |
| 2012-07-16 14:10:54          | 2012-07-16 14:15:01           |
| 2012-07-13 12:56:51          | 2012-07-16 13:49:48           |
| 2012-07-16 14:10:54          | 2012-07-16 14:19:46           |
| 2012-07-24 16:05:05          | 2012-07-24 16:05:48           |
| 2012-07-24 17:42:58          | 2012-07-24 17:43:33           |
| 2012-07-24 17:42:58          | 2012-07-24 17:45:18           |
| 2012-07-26 16:55:40          | 2012-07-26 16:55:53           |
+------------------------------+-------------------------------+

हम्म, ऐसा लगता है जैसे शाखाओं को विलय करते समय।
फिश मॉनिटर


इन दो भिन्न तिथियों के होने का एक अप्रत्याशित दुष्परिणाम: git logडिफ़ॉल्ट रूप से केवल लेखक प्रतिबद्ध दिनांक दिखाता है। लेकिन अगर आप का उपयोग करें --since, --until, --before, --after, रिश्तेदार की तारीख, Git का उपयोग करता है committer तारीख बजाय प्रतिबद्ध! git log --since="yesterday"अपेक्षित परिणाम दिखाई नहीं देगी यदि लेखक प्रतिबद्ध तारीख से अलग है committer तारीख प्रतिबद्ध।
शेरिलहोमन

इस बारे में कि क्या विलय तारीखों में फेरबदल हो सकता है, यह इस बात पर निर्भर हो सकता है कि क्या मर्ज कुछ गैर-डिफ़ॉल्ट तरीके से कॉन्फ़िगर किया गया है जो कमिट को संशोधित करता है। उदाहरण के लिए, git --squash mergeकुछ हद तक सामान्य मर्ज की रणनीति है जिसे कॉन्फ़िगर किया जा सकता है (हालांकि ऐसा नहीं लगता है कि इसका उपयोग यहां किया जा रहा है, यह उदाहरण के लिए लाया गया है)। इसके अलावा, अगर git का उपयोग IDE या git GUI के माध्यम से किया जा रहा है, तो CLI में कॉन्फ़िगरेशन / कार्यक्षमता मौजूद नहीं होने की संभावना है। यह आपके द्वारा मर्ज करने वाले वातावरण में करने के लिए आपके मर्ज को डबल-चेक करने के लिए कॉन्फ़िगर करने योग्य हो सकता है।
जॉर्ज पेंटाज़ेस

जवाबों:


160

लेखक तारीख नोट जब यह प्रतिबद्ध मूल रूप से बनाया गया था (यानी जब आप समाप्त git commit)। डॉक्स के अनुसार git commit, --dateस्विच का उपयोग करके लेखक की तारीख को ओवरराइड किया जा सकता है ।

प्रतिबद्ध तारीख हर बार प्रतिबद्ध उदाहरण के लिए संशोधित किया जा रहा है, जब शाखा जहां प्रतिबद्ध एक और शाखा (पर में है रिबेसिंग बदल जाती है और अधिक )।

यदि आप अपना कमिटमेंट करते हैं और किसी अन्य रेपो में पैच लगाने के लिए अपना पैच दूसरे को भेजते हैं, तो ऐसा हो सकता है: लेखक तिथि आपकी तारीख होगी git commit, जब पैच लागू हो जाएगा, तो तारीख उस तारीख को सेट हो जाएगी अन्य रेपो।

यदि आप दो सहयोगियों को पैच भेजते हैं, तो एक लेखक की तारीख होगी लेकिन दो अलग-अलग प्रतिबद्ध तारीखें।

इसका उल्लेख Git Book में भी किया गया है :

आप सोच रहे होंगे कि लेखक और कमिटर के बीच क्या अंतर है । लेखक , जबकि व्यक्ति जो मूल रूप से पैच लिखा है committer व्यक्ति जो पिछले पैच लागू किया है। इसलिए, यदि आप किसी प्रोजेक्ट में पैच भेजते हैं और कोर सदस्यों में से एक पैच लागू करता है, तो आप दोनों को क्रेडिट मिलता है - आप लेखक और कोर सदस्य के रूप में कमिट करते हैं


क्या मेरा मामला शाखाओं के विलय के समय होगा?
फिश मॉनीटर

3
नहीं। मेरा मानना ​​है कि तारीख SHA का हिस्सा है, इसलिए जब तक आप कुछ ऑपरेशन नहीं करते हैं जो इतिहास को फिर से लिखता है, जैसे कि रिबासिंग, इसे बदलना नहीं चाहिए।
asmeurer

2
चेरी-पिक के बाद हमें बदलाव की उम्मीद कैसे करनी चाहिए, इसका संक्षिप्त विवरण, संशोधन के बाद, या कमिट करने वाले पूर्वजों की विधिवत सराहना की जाएगी। git show -s --format="commit %cD author %aD" HEADउदाहरण के साथ , ऐसा लगता है कि, उदाहरण के लिए, git guiदोनों के अपडेट के साथ प्रतिबद्ध संदेश को संशोधित कर सकता है , लेकिन git commit --amendकेवल कमेंट की तारीख को अपडेट करता है। unintuitive।
init_js

24

एक कमिट पर लेखक की तारीख को रिबेस / चेरी-पिक आदि पर संरक्षित किया जाता है, लेकिन कमिट डेट बदल दी जाती है।


विचाराधीन कुछ कमेंट या तो चेरी-पिकिंग या रीबासिंग नहीं हैं। वे एक अन्य शाखा को विलय करने की तरह दिखते हैं।
मछली मॉनिटर

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