【git】提交到github不顯示貢獻小綠點問題的解決

本文轉載自:https://www.cnblogs.com/zzhangyuhang/p/9896151.html

問題描述:

  最近一直在用github來寫博客,可是今天發現github上的contributions記錄並無個人提交記錄.html

  通過一番百度和自行搗鼓發現了問題所在.git

緣由:github

  最近實習,公司給配電腦.原來沒有git,是用homebrew安裝的,github上的倉庫也是用新電腦來建立的,以及後續博客的提交也是.spa

  由於是mac並無進行本地的任何配置,就直接用終端把本地文件push到倉庫中去了.3d

  緣由也就在這裏.htm

  由於你本地的git默認的user.name和user.email並非你的,而是本機.因此在此期間你的commit都是默認本機的.blog

  你能夠用git config user.name / git config user.email 來查看本身的git所屬homebrew

  查不出的結果應該是爲空,由於你根本就沒設置過.開發

  而後用git log查看一下commit記錄.你會驚奇的發現雖然在往你的github倉庫中push,可是用戶名和郵箱卻不是你github的,而是系統默認的pc用戶.博客

  因此github貢獻統計的根本就不是你的帳戶,就沒有貢獻小綠點咯.

解決辦法:

  1.若是你只是想之後的commit記錄,你只須要把當前本地git的user.name和user.email配置一下便可.

        $ git config --global user.name 「github’s Name」
        $ git config --global user.email "github@xx.com"

   這裏只是在git config 後邊添加上了你要更改的內容便可,--global參數指的是全局,也就是你本地的全部倉庫,若是不加就是單個倉庫.

   修改好後,你之後的commit就是你的帳戶了,就能被統計貢獻小綠點了.

  2.若是你不想浪費以前的commit貢獻,須要把全部你用默認帳戶的commit都歸爲你真正的名下怎麼辦.

  咱們須要修改全部的commit和push歷史

 git filter-branch -f --env-filter '
if [ "$GIT_AUTHOR_NAME" = "oldName" ]
then
export GIT_AUTHOR_NAME="newName"
export GIT_AUTHOR_EMAIL="newEmail"
fi
' HEAD
 
git filter-branch -f --env-filter '
if [ "$GIT_COMMITTER_NAME" = "oldName" ]
then
export GIT_COMMITTER_NAME="newName"
export GIT_COMMITTER_EMAIL="newEmail"
fi
' HEAD

   這裏的oldName咱們能夠經過git log來查看,其實這裏只要修改GIT_COMMITTER就能夠了.

  AUTHOR記錄的是此次修改的做者信息,COMMITTER是此次提交的用戶信息.

  注意二者區別,

    若是你本身寫本身提交,那麼二者都是你.

    有的項目有的人並無commit權限,因此他須要修改完以後交給有權限的人提交,這樣你是AUTHOR並非COMMITTER 

   若是修改爲功提示:Ref 'refs/heads/master' was rewritten.

   若是修改失敗提示:Ref 'refs/heads/master' is unchanged.這裏多是由於你填寫的oldName並無找到.

   若是無差異把全部都改的話去掉if..fi

git filter-branch -f --env-filter "
GIT_AUTHOR_NAME='newName';
GIT_AUTHOR_EMAIL='newEmail';
GIT_COMMITTER_NAME='newName';
GIT_COMMITTER_EMAIL='newEmail'
" HEAD

  這樣就所有改過來了.

注意:

  你這裏將你本地git的帳戶和郵箱從新設置了,可是github並無那麼智能就能判斷你是原來你係統默認的用戶.

  也就是說你新配置的用戶和你默認的被github識別成兩個用戶.

  這樣你之後操做的時候commit 或者 push的時候有可能產生衝突.

  解決方法是

  1.使用強制push的方法:

   $ git push -u origin master -f
  這樣會使遠程修改丟失,通常是不可取的,尤爲是多人協做開發的時候。

  我這裏只是本身寫的博客,因此就直切所有強制覆蓋掉了.

  2.push前先將遠程repository修改pull下來

  git pull origin master
  git push -u origin master

  3.若不想merge遠程和本地修改,能夠先建立新的分支:

  git branch [name]
  而後push

  git push -u origin [name]

效果圖: 

在使用默認的git用戶修改的顯示是這樣的,nice是個人pc用戶名

修改以後,

修改完以後刷新,個人貢獻小綠點所有出來了.(小綠點是以帳戶郵箱爲單位記錄的,若是有多個郵箱,能夠在信息裏的email添加新郵箱就完事ok)

最後叮囑:

  當咱們換電腦使用git的時候,記得修改 git config user.name/user.email就不會出現這樣的問題了.

相關文章
相關標籤/搜索