[英]Git - branch commits history are duplicated
我有一個分支,幾乎所有提交都有錯誤的電子郵件"mywrong@email.com"
,我想將該電子郵件更改為我當前的電子郵件"mynew@email.com"
。
在搜索時,我發現了這個:
git filter-branch --commit-filter 'if [ "$GIT_COMMITTER_EMAIL" = "mywrong@email.com" ];
then
export GIT_AUTHOR_NAME="Sandrina Pereira";
export GIT_AUTHOR_EMAIL=mynew@email.com;
export GIT_COMMITTER_NAME="Sandrina Pereira";
export GIT_COMMITTER_EMAIL=mynew@email.com;
fi; git commit-tree "$@"'
在這里查看 COMMITTER 和 AUTHOR 之間的區別。 真正更改提交身份驗證很重要,否則機智將顯示mynew
在oldnew
原始提交下oldnew
提交。 在這里,我想更改作者和提交者。
然后我做了git commit -am "change author"
, git pull
和git push
。
問題是現在我所有的提交都重復了,正如你在這里看到的
我搜索了如何刪除這些提交,我發現了這個:
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "mywrong@email.com" ];
then skip_commit "$@";
else git commit-tree "$@";
fi' HEAD
但我還沒試過……我該怎么辦?
下次我想替換電子郵件提交時,避免這種混亂的正確命令是什么?
你的問題是一些其他問題的重復,但我會給出一個答案,以便這個問題有一些結束語。
您在這個問題中使用了git filter-branch
,以便在少數提交時更正電子郵件。 這成功了,但是您隨后采取了以下錯誤操作:
然后我做了 git commit -am "change author", git pull 和 git push。
我認為您不需要提交,但有問題的是git pull
。 這拉入了遠程分支的備用原始版本,然后將其合並到您的本地分支中。 這導致您重寫的提交變得重復。 以下是您在運行filter-branch
后應該立即執行filter-branch
:
git push --force origin master # assumes your branch is master; change if needed
這將覆蓋遠程分支,將其替換為您在本地創建的版本,其中包含更新電子郵件地址。 請記住, filter-branch
與git rebase
,會重寫Git 分支的歷史記錄。 因此,將分支帶到遠程的最后一步總是強制推送,以重寫遠程歷史。
請參閱此 SO 問題以了解一些從您現在所處的情況中恢復過來的技巧,但要意識到僅進行強制推動就可以避免這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.