第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

git rebase而不更改提交時間戳

git rebase而不更改提交時間戳

Git
慕的地8271018 2019-10-15 09:54:53
git rebase在保留提交時間戳的同時執(zhí)行是否有意義?我認(rèn)為后果是新分支不一定按時間順序排列提交日期。從理論上講這完全可能嗎?(例如,使用管道命令;只是在這里感到好奇)如果理論上可行,那么實踐中是否有可能重新設(shè)置基準(zhǔn)而不更改時間戳?例如,假設(shè)我有以下樹:master <jun 2010>  |  :  :  :     oldbranch <feb 1984>  :     /oldcommit <jan 1984>現(xiàn)在,如果我oldbranch依據(jù)的話master,提交的日期將從1984年2月更改為2010年6月。是否可以更改該行為,以便不更改提交時間戳記?最后,我將獲得:      oldbranch <feb 1984>      / master <jun 2010>    |    :那完全有意義嗎?甚至在git中允許有一個歷史記錄,其中舊提交作為父提交具有較新的提交?
查看完整描述

3 回答

?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗 獲得超10個贊

David Fraser 在評論中提到了一種解決方案,該解決方案在“ 使用git分支更改基礎(chǔ)時更改時間戳 ”中也有詳細(xì)--committer-date-is-author-date介紹,使用了該選項(最初于2009年1月在commit 3f01ad6中引入


請注意,該--committer-date-is-author-date選項似乎保留了作者時間戳,并將提交者時間戳設(shè)置為與原始作者時間戳相同,這是OP Olivier Verdier想要的。


我找到了正確日期的最后一次提交,并做到了:


git rebase --committer-date-is-author-date SHA

見git am:


--committer-date-is-author-date

默認(rèn)情況下,該命令將電子郵件中的日期記錄為提交作者日期,并將提交創(chuàng)建的時間用作提交者日期。

這允許用戶使用與作者日期相同的值來確定提交者日期。


(原始答案,2012年6月)


你可以嘗試,對于非交互式的rebase


git rebase --ignore-date

(從這個SO答案)


這傳遞給git am,其中提到:


 --ignore-date

默認(rèn)情況下,該命令將電子郵件中的日期記錄為提交作者日期,并將提交創(chuàng)建的時間用作提交者日期。

這允許用戶通過使用與提交者日期相同的值來說謊關(guān)于作者日期。


對于git rebase,此選項為“與--interactive選項不兼容”。


由于您可以隨意更改舊提交日期的時間戳記(帶有g(shù)it filter-branch),因此我想您可以按照想要/需要的任何提交日期順序來組織您的Git歷史記錄,甚至可以將其設(shè)置為將來!。


正如奧利維爾(Olivier)在他的問題中提到的那樣,作者的日期永遠(yuǎn)不會因更改基準(zhǔn)而改變。

從Pro Git書中:


作者是最初撰寫作品的人,

而提交者是最后應(yīng)用該作品的人。

因此,如果您向項目發(fā)送補(bǔ)丁程序,并且其中一個核心成員應(yīng)用了補(bǔ)丁程序,那么你們兩個都將獲得榮譽(yù)。


在這種情況下,要更加清楚,正如奧利維爾(Olivier)所說:


這--ignore-date與我要實現(xiàn)的目標(biāo)相反!

即,它將刪除作者的時間戳,并用提交時間戳替換它們!

因此,對我的問題的正確答案是:

不要執(zhí)行任何操作,因為git rebase 默認(rèn)情況下實際上不會更改作者的時間戳。


查看完整回答
反對 回復(fù) 2019-10-15
?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗 獲得超16個贊

默認(rèn)情況下,git rebase會將提交者的時間戳設(shè)置為創(chuàng)建新提交時的時間,但保持作者的時間戳不變。大多數(shù)時候,這是期望的行為,但是在某些情況下,我們也不想更改提交者的時間戳。我們怎樣才能做到這一點(diǎn)?好吧,這是我通常做的把戲。


首先,確保您將要重新建立基礎(chǔ)的每個提交都具有唯一的提交消息和作者時間戳(這是技巧需要改進(jìn)的地方,盡管目前可以滿足我的需要)。


在重新設(shè)置基準(zhǔn)之前,請記錄提交者的時間戳,作者的時間戳以及所有將基于文件的提交的提交消息。


#NOTE: BASE is the commit where your rebase begins

git log --pretty='%ct %at %s' BASE..HEAD > hashlog

然后,進(jìn)行實際的變基。


最后,如果使用提交消息相同,則用文件中記錄的時間戳替換當(dāng)前提交者的時間戳git filter-branch。


 git filter-branch --env-filter '__date=$(__log=$(git log -1 --pretty="%at %s" $GIT_COMMIT); grep -m 1 "$__log" ../../hashlog | cut -d" " -f1); test -n "$__date" && export GIT_COMMITTER_DATE=$__date || cat'

如果出了什么問題,只需結(jié)帳git reflog或所有refs/original/參考。


此外,您可以執(zhí)行與作者的時間戳類似的操作。


例如,如果作者的某些提交時間戳不正確,并且沒有重新排列這些提交,我們只希望作者的時間戳按順序顯示,那么以下命令將有所幫助。


git log --pretty='%at %s' COMMIT1..COMMIT2 > hashlog

join -1 1 -2 1 <(cat hashlog | cut -f 1 | sort -nr | awk '{ print NR" "$1 }') <(cat hashlog | awk '{ print NR" "$0 }') | cut -d" " -f2,4- > hashlog_

mv hashlog_ hashlog

git filter-branch --env-filter '__date=$(__log=$(git log -1 --pretty="%s" $GIT_COMMIT); grep -m 1 "$__log" ../../hashlog | cut -d" " -f1); test -n "$__date" && export GIT_AUTHOR_DATE=$__date || cat'


查看完整回答
反對 回復(fù) 2019-10-15
  • 3 回答
  • 0 關(guān)注
  • 2350 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號