2017-01-15 206 views
1

我有一個分支,幾乎所有提交都有錯誤的電子郵件"[email protected]",我想將該電子郵件更改爲我目前的電子郵件"[email protected]"Git - 分支提交歷史重複

搜索時,我發現這一點:

git filter-branch --commit-filter 'if [ "$GIT_COMMITTER_EMAIL" = "[email protected]" ]; 
    then 
    export GIT_AUTHOR_NAME="Sandrina Pereira"; 
    export [email protected]; 
    export GIT_COMMITTER_NAME="Sandrina Pereira"; 
    export [email protected]; 
    fi; git commit-tree "[email protected]"' 

See here the difference between COMMITTER and AUTHOR。真正改變commit auth非常重要,否則wit會顯示mynewoldnew原始提交下做了提交。在這裏我想改變作者和提交者。

然後我做了git commit -am "change author",git pullgit push

的問題是,現在你can see here

我搜索如何刪除這些提交,我發現這一切我都提交重複:

git filter-branch --commit-filter ' 
    if [ "$GIT_AUTHOR_EMAIL" = "[email protected]" ]; 
    then skip_commit "[email protected]"; 
    else git commit-tree "[email protected]"; 
fi' HEAD 

但我沒有嘗試,但.. 。 我該怎麼辦?

並在下一次我想更換電子郵件提交什麼是正確的命令,以避免這種混亂?

回答

1

你的問題是一些其他問題的重複,但我會給出答案,以便這個問題有一些困難。

您從this question開始使用git filter-branch,以糾正少數提交中的電子郵件。這成功了,但是你然後採取了以下不正確的行動:

然後我做了git commit -am「更改作者」,git pull和git push。

我不認爲你需要做出承諾,但什麼是有問題的是git pull。這將拉到遠程分支的備用原始版本中,然後將其合併到本地分支中。這導致您重寫的提交重複。下面是你應該運行filter-branch後立即進行:

git push --force origin master # assumes your branch is master; change if needed 

這將覆蓋遠程分支,與你在本地創建的版本替換它,包含更新的電子郵件地址。請記住,filter-branch,就像git rebase,重寫 Git分支的歷史。因此,將分支帶到遙控器的最後步驟總是在進行推力,以重寫該遠程歷史記錄。

請參閱this SO question瞭解一些提示,以便從現在的狀況中恢復過來,但要意識到只要進行推力就可以避免此問題的發生。

+0

謝謝你再次解釋我。我不是git的專家,所以這些命令對我來說仍然是一個迷霧。我會仔細閱讀這個問題,並嘗試解決這個混亂。 –

+0

如果我在這種情況下,我會盡力回到你開始的地方。也許你有另一個非常相似的分支,你可以使用它?只要記住當你完成時強行推動,並且不要從遙控器拉東西;在'filter-branch'之後,你應該將舊的遠程版本的分支視爲已經死亡。 –

+1

哇,多好的想法,我有另一個分支是的。我會做一個副本,並嘗試你所說的話,然後強制合併到主。 –