संशोधन करते समय git प्रतिबद्ध लेखक तिथि अपडेट करें


305

मैंने पाया कि मैं अपने कमिट में अक्सर संशोधन करता रहता हूं। मैं ऐसा नहीं करता stashक्योंकि मैं भूल जाता हूं कि मैंने ऐसा किया है, खासकर जब मैं चाहता हूं कि मैं जो कुछ छोड़ूं या सप्ताहांत से पहले करूं, उसे बचाऊं, इसलिए मैं एक "मसौदा" प्रतिबद्ध करता हूं। केवल एक चीज है, जब मैं प्रतिबद्ध संशोधन करता हूं, तो यह अभी भी मूल लेखक की तारीख पर सेट है। क्या संशोधन करते समय इसे अपडेट करने का एक (सरल) तरीका है?


5
यह विशेष रूप से तब उपयोगी होता है जब आप इंटरैक्टिव रिबास करते हैं और GitHub से अपेक्षा करते हैं कि वह डेट ऑर्डर के बजाय ट्री ऑर्डर में पुल अनुरोध में कमिट्स प्रदर्शित करे।
सुकिमा

जवाबों:


368

आप --dateपैरामीटर के साथ लेखक की तारीख बदल सकते हैं git commit। इसलिए, यदि आप अंतिम प्रतिबद्धता में संशोधन करना चाहते हैं, और इसकी लेखक तिथि को वर्तमान तिथि और समय के लिए अपडेट कर सकते हैं, तो आप कर सकते हैं:

git commit --amend --date="$(date -R)"

( -Rपैरामीटर dateइसे आरएफसी 2822 प्रारूप में दिनांक को आउटपुट करने के लिए कहता है। यह उन दिनांक स्वरूपों मेंgit commit से एक है, जिन्हें समझा जाता है ।)


27
FTR, OS X की तरह दिखता है, dateपता नहीं है -Rdateविकल्पों के बिना उपयोग करना वैसे भी काम था
ksol

7
ध्यान दें कि यदि आप इसे एक उपनाम के रूप में चाहते हैं, तो आपको !उद्धरण चिह्नों को जोड़ना होगा और बचना होगा, जैसेcan = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg

9
date -Rपर OSX काम नहीं करता, उपयोग date +%sके बजाय
गुप्त कोष में

4
फ्रीबीएसडी के लिए Idem:git commit --amend --date="$(date +%s)"
डेरेकसन

120
git commit --amend --date=nowकाम भी करता है। दिनांक (1) आदेश के साथ एक उप-आह्वान करने की आवश्यकता नहीं है । आप के स्रोत कोड में देख सकते हैं Git (1) में date.c 'अब' एक विशेष मूल्य जो date_now () फ़ंक्शन का उपयोग कर परिवर्तित किया जाता है है। 'दोपहर', 'कल', 'आधी रात', 'चाय' और अन्य के लिए समान संरचना सरणी विशेष में सूचीबद्ध []।
sbz

267

ऐसा करने का एक और तरीका है

git commit --amend --reset-author

यह प्रतिबद्ध लेखक के साथ-साथ तारीख को भी बदल देता है - लेकिन अगर यह मूल रूप से आपकी अप्रकाशित प्रतिबद्धता थी, तो यह एक नो-ऑप है।

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


4
मुझे आश्चर्य है कि यह व्यवहार डिफ़ॉल्ट क्यों नहीं है और इसे स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए। यह बहुत आश्चर्य की बात है और संभावित खराब परिणामों की ओर ले जाता है। मेरी समझ में git commit --amend बदलाव सिर्फ बोलने या कुछ ऐसा करने के बजाय होता है, अर्थात इसके परिणामस्वरूप रिपॉजिटरी कंटेंट में बदलाव होता है, जहां कोई भी संस्करण नियंत्रण प्रणाली बहुत सख्त होती है। और जैसा कि मैं सहज रूप से उम्मीद करता हूं कि लेखक और तारीख दोनों वास्तविक प्रतिबद्ध डेटा का मिलान कर रहे हैं। विशेष रूप से लेखकत्व महत्वपूर्ण है, तिथि भी नहीं। यदि आप ऐसे डिफॉल्ट के लिए जिम्मेदार गिट डेवलपर्स को पीटना चाहते हैं तो इस टिप्पणी को वोट करें। :)
आर्टेम Pisarenko

258

Git v2.1.4 (डेबियन 8 (जेसी) पर परीक्षण)

git commit --amend --date=now

8
और यदि आप फिर से प्रतिबद्ध संदेश नहीं देखना चाहते हैं, तो जोड़ें --no-edit
हेनरिक एन

12

मुझे मार्क का जवाब पसंद है और कई बार खुद इसका इस्तेमाल किया, लेकिन अब मैं ओएस एक्स पर हूं और date -Rसमर्थित नहीं हूं । लेकिन मूल उत्तर की तुलना में सब कुछ बहुत आसान है, हमें लगता है कि बस खाली स्ट्रिंग का उपयोग करें !

git commit --date= --amend

6
यह काम नहीं करता है। Git त्रुटि के साथ गर्भपात करता हैfatal: invalid date format:
निकोस सी।

मेरे लिए काम किया (Windows पर, Git 1.9.4)
Csq

1
--date="$(date)"ओएस एक्स में उपयोग करने के लिए बेहतर है । विकल्प -RGNUism है।
रुदा मौरा

0

अगर मैंने अभी भी किसी को कई कमिट की तारीखों को बदलने के लिए एक सरल तरीके की तलाश में है, तो मैंने यह एनपीएम पैकेज बनाया।

https://github.com/bitriddler/git-change-date

उपयोग:

npm install -g git-change-date
cd [your-directory]
git-change-date

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