Git में पुराने कमिट का टाइमस्टैम्प कैसे बदल सकता है?


746

मौजूदा, अप्रकाशित को संशोधित करने के तरीके के जवाब ? पिछले प्रतिबद्ध संदेशों को संशोधित करने का एक तरीका बताएं, जो अभी तक ऊपर की ओर नहीं बढ़ा है। नए संदेश मूल कमिटों के टाइमस्टैम्प को विरासत में लेते हैं। यह तर्कसंगत लगता है, लेकिन क्या समय को फिर से निर्धारित करने का कोई तरीका है?



34
git commit --amend --reset-author
एरिक एम। स्प्रेंगेल

जवाबों:


535

git filter-branchएक env फ़िल्टर के साथ प्रयोग करें जो सेट करता है GIT_AUTHOR_DATEऔर GIT_COMMITTER_DATEआपके द्वारा ठीक किए जाने वाले कमिट के विशिष्ट हैश के लिए।

यह और भविष्य के सभी हैश को अमान्य कर देगा।

उदाहरण:

यदि आप प्रतिबद्ध तारीखों को बदलना चाहते हैं 119f9ecf58069b265ab22f1f97d2b648faf932e0, तो आप ऐसा कुछ कर सकते हैं:

git filter-branch --env-filter \
    'if [ $GIT_COMMIT = 119f9ecf58069b265ab22f1f97d2b648faf932e0 ]
     then
         export GIT_AUTHOR_DATE="Fri Jan 2 21:38:53 2009 -0800"
         export GIT_COMMITTER_DATE="Sat May 19 01:01:01 2007 -0700"
     fi'


8
यह सही मूल्य पाया , लेकिन सिर्फ उन चर की स्थापना वास्तव में पुरानी प्रतिबद्ध की तारीख को प्रभावित करने के लिए नहीं लगता था।
IQAndreas

36
आपका क्या मतलब है "यह और भविष्य के सभी हैश को अमान्य कर देगा।"
इपिकादेवी

16
एपिकडावी: इसका मतलब है कि आपको किसी भी दूरस्थ रिपॉजिटरी में पुश करने के लिए मजबूर करना होगा, और जिस किसी ने भी कमिट या भविष्य के किसी भी काम को किया है, उसे रीसेट करना होगा और स्क्रैच से हटाना और हटाना या क्लोन करना होगा। जहां तक ​​मुझे पता है, कोई भी तरीका ऐसा नहीं है जो इसके आसपास हो।
एरीएफ89

4
शुरुआती लोगों के लिए एक नोट के रूप में, शॉर्ट हैश अगर स्टेटमेंट में काम नहीं करता है, तो लंबे SHA-1 का उपयोग करें
40detectives

780

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

git commit --amend --date="Wed Feb 16 14:00 2011 +0100"

बाद में आप अपने इंटरैक्टिव रिबेस को जारी रखें।

अद्यतन (स्टूडेंट की टिप्पणी के जवाब में): लेखक की तारीख के बजाय प्रतिबद्ध तारीख बदलने के लिए:

GIT_COMMITTER_DATE="Wed Feb 16 14:00 2011 +0100" git commit --amend

ऊपर दी गई पंक्तियों में एक वातावरण चर GIT_COMMITTER_DATE सेट किया गया है जो संशोधन प्रतिबद्ध में उपयोग किया जाता है।

गिट बैश में सब कुछ परखा जाता है।


22
@nschum --date = "" और --data "गैर-तिथि-पाठ" सभी अब एक ही उपज लेते हैं।
पॉल प्लेडिज्स

12
git संस्करण 1.7.7.1 पर --date = "अब" का उपयोग कर घातक परिणाम देता है: अमान्य दिनांक प्रारूप: अब
Aragorn

4
जब आप जिस तारीख को बदलना चाहते हैं वह सबसे हाल की प्रतिबद्ध है, तो आपको ऐसा करने की ज़रूरत नहीं है rebase, आप बस कर सकते हैंgit commit --amend
13

7
GIT_COMMITTER_DATE = "" निर्यात के बजाय, GIT_COMMITTER_DATE को आज़माएं।
मार्क ई। हासे

2
मैं उपयोग नहीं कर रहा हूँ - ताकि आप स्वचालित स्क्रिप्ट में उपयोग कर सकें! + var fixedDate = strftime(new Date(), "%c"); + var result = shelljs.exec("git commit --amend --date=\"" + fixedDate + "\" --no-edit");
Marcello de Sales

392

एक कमांड में इन सभी सुझावों को संभालने का एक बेहतर तरीका है

LC_ALL=C GIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit --date "$(date)"

यह अंतिम कमिट कमिट और लेखक की तिथि "अभी" के लिए निर्धारित करेगा।


22
यह एक इंटरैक्टिव रिबेस के दौरान विशिष्ट कमिट्स को संपादित करने के लिए बहुत अच्छा काम करता है।
फ्राइडेरब्लुमेले

2
आप इसके लिए शेल में एक उपनाम भी जोड़ सकते हैं
kaleissin

14
ऐसा लगता है कि Git तारीख प्रारूप के बारे में स्थानीय-जागरूक नहीं है, इसलिए पूरी तरह से सही होने के लिए, आपको इसे कुछ इस तरह बनाना होगा:LANG= GIT_COMMITTER_DATE="`date`" git commit --amend --date "`date`"
Michał Góral

मैं ऐसा तब करता हूं जब मैं एक शाखा को रिबेट और स्क्वैश करता हूं, इसलिए यह एक अपडेटेड टाइमस्टैम्प के साथ एक एकल प्रतिबद्ध बनाता है।
ल्यूक एह्र्समैन

12
आप भी सिर्फ कर सकते हैं --date "now"। Git> = 2 इसकी व्याख्या करेगा।
बुद्धिमानबरी

189

बस करो git commit --amend --reset-author --no-edit। पुराने कमिट्स के लिए, आप एक इंटरेक्टिव रीबेस कर सकते हैं और editउस कमिट का चुनाव कर सकते हैं जिसकी तारीख आप संशोधित करना चाहते हैं।

git rebase -i <ref>

फिर संशोधन के साथ प्रतिबद्ध --reset-authorऔर --no-editआज की तारीख करने के लिए लेखक की तारीख बदलने के लिए:

git commit --amend --reset-author --no-edit

अंत में अपने इंटरएक्टिव छूट के साथ जारी रखें:

git rebase --continue

5
उपयोग करने पर अच्छा कॉल --reset-author, यह git 1.6.6 में नया है (रेफ gitlog.wordpress.com/2010/01/13/git-1-6-6 )
टिम एबेल

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

4
नोट --reset-authorलेखक और लेखक तिथि दोनों को अब रीसेट कर देगा।
बुद्धिमानबीर

क्या यह उसी समय "COMMITTER DATE" को बदल देगा?
लूचेन 1990

134

मैंने इसके लिए एक स्क्रिप्ट और Homebrew पैकेज लिखा। सुपर आसान स्थापित करने के लिए, आप इसे GitHub PotatoLabs/git-redateपृष्ठ पर पा सकते हैं ।

वाक्य - विन्यास:

git redate -c 3

आपको बस दौड़ना है git redateऔर आप सबसे हाल के 5 कमिट्स के सभी तिथियों को संपादित करने में सक्षम होंगे (इसमें यह भी -cविकल्प है कि आप कितने कॉमेट्स वापस जाना चाहते हैं, यह सिर्फ 5 के लिए डिफॉल्ट करता है)। यदि आपके कोई प्रश्न, टिप्पणियाँ या सुझाव हैं तो मुझे बताएं!

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


2
महान सामान, भले ही मुझे नैनो के बजाय विम का उपयोग करना पड़ा
howdoyouturnthison

धन्यवाद @Eundund एक महान स्क्रिप्ट के लिए। मैं पुन: संपादित करने के बाद vi में संपादित करने की तारीख नहीं देख सका। सब मैं देख रहा हूँ% cI | XXXXXXXXXXXXXXXX | प्रारम्भिक वचन। क्या आप मदद कर सकतें है? धन्यवाद
कीम गुयेन

@KiemNguyen क्या आप केवल git redate (-c के बिना) आज़मा सकते हैं?
बिग पोटेटो

4
यहां मीना और @howdoyouturnthison से पूरी तरह सहमत हैं, तो आप इसे EDITOR पर्यावरण चर के माध्यम से संपादक अज्ञेय क्यों नहीं बनाते हैं? (यह भी मैं linux पर हूँ, मैक नहीं ...)
ympostor

3
धन्यवाद @ ईमुंड! बस के मामले में, आपको स्क्रिप्ट में COMMITS के लिए डिफ़ॉल्ट मान को संभालने में समस्या है। यदि यह सेट नहीं किया गया है, तो अंतिम कोड अंतिम प्रतिबद्ध के लिए (मुझे लगता है / पाया गया) फ़िल्टर लागू करता है। "git फ़िल्टर-शाखा -f --env-filter" $ ENVFILTER "HEAD ~ $ COMMITS..HEAD> / dev / null"
एंटिन

101

प्रत्येक कमेटी दो तिथियों, कमिट डेट और लेखक तिथि के साथ जुड़ी होती है। आप इन तिथियों को इसके साथ देख सकते हैं:

git log --format=fuller

यदि आप लेखक की तारीख और अंतिम 6 की कमिट तारीख को बदलना चाहते हैं, तो आप बस एक इंटरैक्टिव रिबेस का उपयोग कर सकते हैं:

git rebase -i HEAD~6

pick c95a4b7 Modification 1
pick 1bc0b44 Modification 2
pick de19ad3 Modification 3
pick c110e7e Modification 4
pick 342256c Modification 5
pick 5108205 Modification 6

# Rebase eadedca..5108205 onto eadedca (6 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit

सब करता है जहाँ आप तारीख बदलने के लिए, की जगह चाहते pickद्वारा edit(या बस e), तो बचाने के लिए और अपने संपादक से बाहर निकलें।

अब आप लेखक की तिथि और ISO-8601 प्रारूप में आने वाली तारीख को निर्दिष्ट करके प्रत्येक वचन में संशोधन कर सकते हैं:

GIT_COMMITTER_DATE="2017-10-08T09:51:07" git commit --amend --date="2017-10-08T09:51:07"

पहली तारीख प्रतिबद्ध तारीख है, दूसरी तारीख लेखक की तारीख है।

इसके बाद अगले कमेट पर जाएं:

git rebase --continue

प्रक्रिया को तब तक दोहराएं जब तक आप अपने सभी कमिट्स में संशोधन नहीं कर लेते। के साथ अपनी प्रगति की जाँच करें git status


1
मैंने इसका अनुसरण किया और एक 'गुप्त सिर' पर समाप्त हुआ!
साइमन एच

1
@ साइमन एच मैंने फिर से अपना जवाब दिया है और यह अच्छी तरह से काम करता है आपको कुछ अलग टाइप करना चाहिए था या आप पहले से ही एक अलग सिर में थे। यदि आप एक अलग सिर से वापस आना चाहते हैं a git checkout name-of-current-branch
ओरतमाला लोकनी

3
यह सबसे अच्छा और सबसे आसान जवाब है। छोटे टिप: उपयोग --no-edit में git commit --amend --no-edit --date=2017-10-08T09:51:07पुराने संदेश के लिए प्रतिबद्ध रहते हैं।
मारिउज़ पावेल्स्की

2
आप GIT_COMMITTER_DATE यहां बताए अनुसार अपडेट करना चाह सकते हैं जैसे कि eddmann.com/posts/…
smihael

2
@ शमील लिंक के लिए धन्यवाद। मैंने अपने सुझाव को अपने उत्तर में शामिल कर लिया है।
ओरोमला लोकनी


44

Theosp के उत्तर पर निर्माण , मैंने एक स्क्रिप्ट लिखी git-cdc( जिसे बदलने की तारीख के लिए प्रतिबद्ध है) जिसे मैंने अपने पास रखा PATH

नाम महत्वपूर्ण है: git-xxxकहीं भी आपके PATHटाइप करने की अनुमति देता है:

git xxx
# here
git cdc ... 

वह स्क्रिप्ट बैश में है, यहां तक ​​कि विंडोज पर भी (क्योंकि Git इसे उसके एमएसवाई वातावरण से बुलाएगा )

#!/bin/bash
# commit
# date YYYY-mm-dd HH:MM:SS

commit="$1" datecal="$2"
temp_branch="temp-rebasing-branch"
current_branch="$(git rev-parse --abbrev-ref HEAD)"

date_timestamp=$(date -d "$datecal" +%s)
date_r=$(date -R -d "$datecal")

if [[ -z "$commit" ]]; then
    exit 0
fi

git checkout -b "$temp_branch" "$commit"
GIT_COMMITTER_DATE="$date_timestamp" GIT_AUTHOR_DATE="$date_timestamp" git commit --amend --no-edit --date "$date_r"
git checkout "$current_branch"
git rebase  --autostash --committer-date-is-author-date "$commit" --onto "$temp_branch"
git branch -d "$temp_branch"

इसके साथ, आप टाइप कर सकते हैं:

git cdc @~ "2014-07-04 20:32:45"

वह HEAD ( @~) से पहले की तारीख के लेखक / प्रतिबद्ध तिथि को निर्दिष्ट तिथि पर रीसेट कर देगा ।

git cdc @~ "2 days ago"

यह एचईएडी ( @~) से पहले के लेखक / प्रतिबद्ध तारीख को एक ही घंटे में रीसेट करेगा , लेकिन 2 दिन पहले।


इलिया सेमेनोव ने टिप्पणियों में उल्लेख किया है :

ओएस एक्स के लिए आप भी जीएनयू स्थापित कर सकता है coreutils( brew install coreutils), के लिए इसे जोड़ने PATH( PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH") और फिर उपयोग करें " 2 days ago" वाक्य रचना।


1
मेरे लिए यह केवल दिनांक और समय को एक उद्धरण में उद्धृत करने के साथ काम करता था: git cdc @~ "2014-07-04 20:32:45अन्यथा यह समय को नहीं पहचानता और इसलिए समय 00:00:00 प्राप्त करता है (यह तीसरा तर्क बन जाता है)।
peschü

3
OS X के लिए आप GNU कोरुटिल्स ( brew install coreutils) भी स्थापित कर सकते हैं , इसे PATH ( PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH") में जोड़ें और फिर "सिंटैक्स" का उपयोग 2 दिन पहले करें।
इलिया सेमेनोव

1
@ इलियासमेनोव दिलचस्प। अधिक दृश्यता के उत्तर में मैंने आपकी टिप्पणी शामिल की है।
VonC

मैं आपके पहले उदाहरण का उपयोग करने की कोशिश कर रहा हूं, लेकिन मुझे "घातक: अमान्य दिनांक प्रारूप:" मिलता रहा है। मैक ओएस एक्स की उम्मीद किस प्रारूप में है?
usbsnowcrash

@usbsnowcrash मैक पर निश्चित नहीं है। क्या दूसरा उदाहरण " 2 days ago" काम करता है?
वॉन

25

एकाधिक प्रतिबद्ध तिथियों को कैसे संपादित करें

अन्य उत्तर कई प्रतिबद्ध तिथियों के संपादन के लिए बहुत सुविधाजनक नहीं हैं। मैं एक तकनीक साझा करने के लिए कुछ वर्षों के बाद इस सवाल पर वापस आया हूं।

अंतिम 4 की तारीखों को बदलने के लिए:

git rebase -i HEAD~4

निम्नानुसार रीबेस को संपादित करें, execआवश्यकतानुसार तारीखों को संशोधित करने के लिए लाइनें सम्मिलित करें :

pick 4ca564e Do something
exec git commit --amend --no-edit --date "1 Oct 2019 12:00:00 PDT"
pick 1670583 Add another thing
exec git commit --amend --no-edit --date "2 Oct 2019 12:00:00 PDT"
pick b54021c Add some tests
exec git commit --amend --no-edit --date "3 Oct 2019 12:00:00 PDT"
pick e8f6653 Fix the broken thing
exec git commit --amend --no-edit --date "4 Oct 2019 12:00:00 PDT"

--amend/ --dateविकल्प का अच्छा उपयोग । पर्यावरण चर का उपयोग करके अपने स्वयं के उत्तर की तुलना में सरल । Upvoted।
वॉनक

क्या पैरामीटर के रूप में वर्तमान तिथि / समय का उपयोग करना संभव है?
10

वह GIT_AUTHOR_DATEकेवल अद्यतन करता है।
ब्लेज

पुन। '? यह पैरामीटर के रूप में वर्तमान दिनांक / समय उपयोग करना संभव है': "अब", कोई मान्य दिनांक के रूप में समझा जाता है तो कार्यकारी लाइनों के ऊपर बन जाएगाexec git commit --amend --no-edit --date "now"
एंड्रयू रिचर्ड्स

20

अगर यह पिछले प्रतिबद्ध है।

git rebase  -i HEAD~2
git commit --amend --date=now

यदि आप पहले से ही ऑर्गन को धक्का देते हैं और बल प्रयोग कर सकते हैं:

git push --force 

अगर आप जोर जबरदस्ती नहीं कर सकते हैं और अगर धक्का दिया जाता है, तो आप कमिट नहीं बदल सकते! ।


18

यहाँ एक सुविधाजनक उर्फ ​​है जो अंतिम प्रतिबद्ध के लिए प्रतिबद्ध और लेखक दोनों को एक समय में स्वीकार करता है date --date:

[alias]
    cd = "!d=\"$(date -d \"$1\")\" && shift && GIT_COMMITTER_DATE=\"$d\" \
            git commit --amend --date \"$d\""

उपयोग: git cd <date_arg>

उदाहरण:

git cd now  # update the last commit time to current time
git cd '1 hour ago'  # set time to 1 hour ago

संपादित करें: यहां एक अधिक-स्वचालित संस्करण है जो यह जांचता है कि सूचकांक साफ है (बिना किसी बदलाव के) और अंतिम प्रतिबद्ध संदेश का पुन: उपयोग करता है, या अन्यथा विफल होता है (मूर्खतापूर्ण):

[alias]
    cd = "!d=\"$(date -d \"$1\")\" && shift && \
        git diff-index --cached --quiet HEAD --ignore-submodules -- && \
        GIT_COMMITTER_DATE=\"$d\" git commit --amend -C HEAD --date \"$d\"" \
        || echo >&2 "error: date change failed: index not clean!"

17

मैंने पुराने कमिट की तारीख बदलने के लिए इस npm पैकेज का निर्माण किया।

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

नमूना उपयोग:

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

आपको उस कमेट को चुनने के लिए प्रेरित किया जाएगा जिसे आप संशोधित करना चाहते हैं फिर नई तारीख दर्ज करें।

यदि आप विशिष्ट हैश द्वारा इसे चलाने के लिए इसे बदलना चाहते हैं git-change-date --hash=[hash]


मैं सिर्फ यह कहना चाहता था कि यह शानदार है और खूबसूरती से काम किया है। धन्यवाद, आपने मुझे बहुत समय बचाया!
परांजा

17

निम्नलिखित बैश फ़ंक्शन वर्तमान शाखा पर किसी भी कमिट का समय बदल देगा।

यदि आप पहले से ही कमिट को पुश करते हैं या यदि आप किसी अन्य ब्रांच में कमिट का उपयोग करते हैं, तो इसका उपयोग न करें।

# rewrite_commit_date(commit, date_timestamp)
#
# !! Commit has to be on the current branch, and only on the current branch !!
# 
# Usage example:
#
# 1. Set commit 0c935403 date to now:
#
#   rewrite_commit_date 0c935403
#
# 2. Set commit 0c935403 date to 1402221655:
#
#   rewrite_commit_date 0c935403 1402221655
#
rewrite_commit_date () {
    local commit="$1" date_timestamp="$2"
    local date temp_branch="temp-rebasing-branch"
    local current_branch="$(git rev-parse --abbrev-ref HEAD)"

    if [[ -z "$date_timestamp" ]]; then
        date="$(date -R)"
    else
        date="$(date -R --date "@$date_timestamp")"
    fi

    git checkout -b "$temp_branch" "$commit"
    GIT_COMMITTER_DATE="$date" git commit --amend --date "$date"
    git checkout "$current_branch"
    git rebase "$commit" --onto "$temp_branch"
    git branch -d "$temp_branch"
}

1
आपके पास वहां एक बग है: if [[ -z "$commit" ]]->if [[ -z "$date_timestamp" ]]
ब्लूफैस्ट

अच्छा! मैं GIT_COMMITTER_DATE=आगे की तारीख निर्दिष्ट रखने के लिए किसी भी अन्य मैनुअल कमिट को रोकने के लिए विधि के अंत में सेटिंग की सिफारिश करूंगा ।
लूपकिन

@loopkin, GIT_COMMITTER_DATE को केवल "git कमिट" कमांड के लिए सेट किया गया है ताकि बाद में इसे खाली करने की आवश्यकता न हो
nimrodm

@nimrodm, मैंने अभी फिर से परीक्षण किया है और आप सही हैं। यह बात बताने के लिए धन्यवाद।
लूपकिन

12

लेखक की तारीख और प्रतिबद्ध तारीख दोनों को बदलने के लिए:

GIT_COMMITTER_DATE="Wed Sep 23 9:40 2015 +0200" git commit --amend --date "Wed Sep 23 9:40 2015 +0200"

10

यदि आप किसी अन्य कमिटमेंट की सटीक तिथि प्राप्त करना चाहते हैं (कहते हैं कि आपने रिबेस को एक कमिट संपादित किया है और चाहते हैं कि यह मूल प्री-रिबेस संस्करण की तारीख हो)

git commit --amend --date="$(git show -s --format=%ai a383243)"

यह ठीक होने की HEAD की तारीख को सही करता है की तारीख को a383243 की प्रतिबद्ध की तारीख को करता है (यदि इसमें अस्पष्टता हो तो और अंक भी शामिल करें)। यह एक संपादक विंडो को भी पॉप अप करेगा ताकि आप प्रतिबद्ध संदेश को संपादित कर सकें।

यह लेखक की तारीख के लिए है जो आप आमतौर पर देखभाल करते हैं - कमेंट की तारीख के लिए अन्य उत्तर देखें।


7

यदि आप मानक Windows कमांड लाइन में स्वीकृत उत्तर ( https://stackoverflow.com/a/454750/72809 ) का प्रदर्शन करना चाहते हैं , तो आपको निम्नलिखित कमांड की आवश्यकता होगी:

git filter-branch -f --env-filter "if [ $GIT_COMMIT = 578e6a450ff5318981367fe1f6f2390ce60ee045 ]; then export GIT_AUTHOR_DATE='2009-10-16T16:00+03:00'; export GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE; fi"

टिप्पणियाँ:

  • कई रेखाओं पर कमांड को विभाजित करना संभव हो सकता है (विंडोज कैरेट प्रतीक के साथ विभाजन को समर्थन करता है ^ ), लेकिन मैं सफल नहीं हुआ।
  • आप आईएसओ तिथियां लिख सकते हैं, तत्वों के क्रम पर सही दिन-प्रति-सप्ताह और सामान्य निराशा खोजने में बहुत समय बचाते हैं।
  • यदि आप चाहते हैं कि लेखक और कमेटी की तारीख समान हो, तो आप पहले से निर्धारित चर का संदर्भ ले सकते हैं।

बहुत से धन्यवाद कॉलिन सीविंगन द्वारा एक ब्लॉग पोस्ट पर जाते हैं । भले ही उनका कोड मेरे लिए काम नहीं करता था, लेकिन इससे मुझे सही समाधान खोजने में मदद मिली।


7

अगर अभी तक धक्का नहीं दिया है तो मैं कुछ इस तरह का उपयोग कर सकता हूं:

git commit --amend --date=" Wed Mar 25 10:05:44 2020 +0300"

उसके बाद git bash पहले से लागू तिथि के साथ संपादक को खोलता है, इसलिए आपको VI संपादक कमांड मोड ": wq" में टाइप करके इसे सहेजने की आवश्यकता है और आप इसे पुश कर सकते हैं


2
बस अच्छे उत्तर के साथ जोड़ना: यदि आप प्रतिबद्ध संदेश को संपादित नहीं करना चाहते हैं (यदि आप सिर्फ तारीख बदलना चाहते हैं), तो --no-editविकल्प का उपयोग करें ।
एंटोनियो विनीसियस मेनेजीस मेडेई

इसके अलावा, यदि कमिट को पहले ही धकेल दिया गया है, तो आप अभी भी बदले हुए कमिट का उपयोग कर सकते हैं git push -f(जबरन अपडेट)। हालांकि इसके साइड इफेक्ट्स हो सकते हैं। (विशेषकर यदि कई लोगों के पास भंडार के स्थानीय क्लोन हैं)
एंटोनियो विनीसियस मेनेजेस मेडी


2

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

#!/bin/bash

# change GIT_AUTHOR_DATE for commit at Thu Sep 14 13:39:41 2017 +0800
# you can change the data_match to change all commits at any date, one day or one month
# you can also do the same for GIT_COMMITTER_DATE

git filter-branch --force --env-filter '

date_match="^Thu, 14 Sep 2017 13+"              

# GIT_AUTHOR_DATE will be @1505367581 +0800, Git internal format 
author_data=$GIT_AUTHOR_DATE;                   
author_data=${author_data#@}                  
author_data=${author_data% +0800}                # author_data is 1505367581     

oneday=$((24*60*60))

# author_data_str will be "Thu, 14 Sep 2017 13:39:41 +0800", RFC2822 format
author_data_str=`date -R -d @$author_data`      

if [[ $author_data_str =~ $date_match ]];
then
    # remove one day from author_data
    new_data_sec=$(($author_data-$oneday))
    # change to git internal format based on new_data_sec
    new_data="@$new_data_sec +0800"             
    export GIT_AUTHOR_DATE="$new_data"
fi
' --tag-name-filter cat -- --branches --tags

तिथि बदली जाएगी:

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