2014-07-18 72 views
9

我最近需要使用'git am'將16個補丁應用到我的回購庫中,並且我非常小心地爲每個補丁使用'--committer-date-is-author-date'。但是,我還需要調整每個amd補丁的提交消息,並且 - 在完成所有16個補丁後 - 我發現'commit --amend'碰撞每個補丁的時間戳。使用'git filter-branch'更正最近N次提交中的提交者日期?

我最終學會了我的問題可能一舉得到解決與

git rebase --committer-date-is-author-date <SHA-of-commit-prior-to-patches> 

而不是試圖解決我的「過濾分支」,沒有工作的問題了。我很好奇我做錯了什麼。這裏是我的嘗試:

git filter-branch --env-filter \ 
    'export GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE' SHA1..HEAD 

這裏是結果:

Rewrite 1c52265d1f06bd67e0fed1c09e1e75249424476e (1/15)/usr/lib/git-core/git-filter-branch: 1: export: -0500: bad variable name 

我做了什麼錯?我不允許在env-filter中設置/導出一個變量作爲另一個變量的值嗎?請注意,如果$ GIT_COMMIT與特定的SHA匹配,我改變了自己的方法,即有條件地更改了GIT_AUTHOR_DATE和GIT_COMMITTER_DATE,但在這種情況下,兩個GIT _ * _ DATE變量都設置爲常量字符串,而不是另一個變量。

回答

14

$GIT_AUTHOR_DATE值包含空格,所以你要引用它(-0500是你的時區偏移):

git filter-branch --env-filter \ 
    'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"' SHA1..HEAD 
+0

我現在看到的,謝謝。 (我曾經假設「-0500」是git-filter-branch內部的一些錯誤代碼。) –

+0

不,這只是沒有引號而是你的導出語句解析爲'export GIT_COMMITTER_DATE = @ 1405671090 -0500'(自紀元和時區偏移量),這是無效的shell語法。 – knittl