簡體   English   中英

Git - 分支提交歷史被復制

[英]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 之間的區別 真正更改提交身份驗證很重要,否則機智將顯示mynewoldnew原始提交下oldnew提交。 在這里,我想更改作者和提交者。

然后我做了git commit -am "change author"git pullgit 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-branchgit rebase ,會重寫Git 分支的歷史記錄。 因此,將分支帶到遠程的最后一步總是強制推送,以重寫遠程歷史。

請參閱此 SO 問題以了解一些從您現在所處的情況中恢復過來的技巧,但要意識到僅進行強制推動就可以避免這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM