1. 程式人生 > >Git使用中的問題彙總(不定時更新...)

Git使用中的問題彙總(不定時更新...)

1. 由於上傳的檔案太大導致push失敗的問題

  • 來源
    在git管理中,不小心把資料檔案(大於100M)也放在了git資料夾中,並且已經commit了,進行push時就會失敗。
  • 解決方法:
    刪除帶有大檔案的commit版本,也就是Git 刪除具體某個提交commit的方法。但這個方法有風險,它在最後使用的語句是
git push origin master –-force

這可能會導致你原先的commit記錄全部被覆蓋掉,就只剩下你當前本地庫的,上次push之後到這次push之間的commit記錄,甚至,可能就只剩下唯一一個commit記錄了,前面的都丟失了。(別問我咋知道的,慘痛的經歷。。。)

  • 你以為就給你剩一個commit就結束了,too young too simple,問題才剛剛開始。。。
1.1 問題剛剛開始

前面使用了

git rebase -i  commit_id

這時,你會發現,本來git的介面後面都是顯示(master)分支的,這下顯示了一個莫名其妙的分支,圖我已經失去了,但記憶深刻,變成了(mastet | rebase-i 2/2),就是下圖這個位置,這裡代表你正在使用的分支:
在這裡插入圖片描述
這就很不懂了,我搗鼓半天,也也能把這個分支弄明白,要是有知道的同學,還麻煩告知一聲,那咋辦呢。

1.2 簡單粗暴沒有用

我就簡單暴力的,直接把當前的.git資料夾刪掉了,重新初始化git init

,然後再重新和遠端庫進行連線

git remote add origin http://xxx

沒有錯誤提示,似乎看到了勝利的希望,然後我就add,成功,我commit,成功,我push,成…成傻逼了:
在這裡插入圖片描述
這也看不懂啊,看這個提示,在push之前,先pull,好嘞,咱來pull。

1.3 提示都是騙人的

在這裡插入圖片描述
我聽它的,來pull,結果告訴我當前分支沒有正在tracking的分支,也就是說,我本地連個樹枝都沒有,你遠端那顆大樹想靠過來都沒法靠啊,不過這裡又有一句提示了:想要tracking當前分支,就用下面這個語句,行,緊跟提示步伐。
在這裡插入圖片描述
用了那個莫名其妙的語句,果然是成功track了,似乎可以push了,然…而,好吧,我再pull。
在這裡插入圖片描述


剛才跟我說沒有樹枝,現在告訴我該樹枝拒絕接受外來不相關人員。。。去查了一下,可以強行放行,下面語句:

git pull origin master --allow-unrelated-histories

看到這一大堆跳動的字元,真開心,沒報錯就是好的。

1.4 勝利就在前方

上面執行完後,最後一句說automatic merge failed,我慌了,我滴老天爺啊,求放過。我小心翼翼的嘗試一下pull,自己來merge,提示:
在這裡插入圖片描述
行吧,感覺這一大圈下來,是git溜我呢,查了一下,說這就是本地還沒commit檔案,那我前面push失敗,是哪來的commit檔案,好吧,1234,再來一次

在這裡插入圖片描述

哇撒,成成功了,這下可以放心的去繼續修改程式碼了。這一場戰役over。

1.5 歷史遺留問題

雖然問題暫時解決了,中間還是有幾個不明白地方,比如

  • rebase到底怎麼什麼用處,使用場景?
  • 本地庫/遠端庫,本地分支/遠端分支概念界限不清

零散問題

  1. add file時出現fatal: Not a git repository (or any of the parent directories): .git錯誤
      原因是沒有進行git init,導致沒有生成.git隱藏資料夾。

  2. 新建分支時,出現fatal: Not a valid object name: 'master’錯誤
      原因是沒有提交一個物件,要先經過add``commit等操作後才會真正建立master分支,此時才可以建立其他分支。

由於遠端庫是空的,我們第一次推送master分支時,加上了-u引數,Git不但會把本地的master分支內容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
$ git push origin branchname
在本地倉庫提交後推送到遠端倉庫
作者:Cloud_9527
連結:https://www.jianshu.com/p/0995b062396c
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。

  1. 在將本地分支推送到遠端庫時,出現fatal: TaskCanceledException encountered
      原因未知,執行下列語句可以解決:
$ git config --global credential.helper manager
  1. 在git commit 編輯title和description後,按Esc鍵後未推出編輯器

今天用git commit -m “註釋”提交的時候,註釋寫錯了。
首先 使用 git commit --amend 命令,(修改最近一次提交的註釋資訊),會進入到vim 編輯器,然後 你會發現編輯器裡你怎麼輸入都沒反應,這是因為vim處在不可編輯狀態,按下字母鍵 c,此時進入編輯狀態,可以開始修改註釋資訊了。
在然後 你會發現你怎麼都退出不了,回到shell了,然後操作如下: ESC --》 退出編輯狀態;接著 連續按兩次大寫字母鍵 Z,接著你會驚喜的發現,終於儲存好退出來了!
windows 系統 ,親測有效!!拿走不謝!
來源:月下小狸123的部落格園

4.2 commit補充:在windows下的commit預設編輯器是,是TM啥啊,我也不知道,但是,開啟Git CMD通過下面語句將其改為vim

$ git config --global core.editor vim,

以後就不會編輯後不知道咋退出啦。

  1. git提示modified:xxx(modified content, untracted content)
    原因:目錄沒有被跟蹤;
    解決:刪除xxx目錄下的.git資料夾即可繼續操作

  2. pull時提示The authenticity of host ‘github.com (xx.xx.xx.xx)’ can’t be estabilished
    因為預設是用HTTPS連線遠端庫和本地庫,但git的連線方式有兩種,還可以用ssh連線,我就手欠的試了一下ssh連線方式
    在這裡插入圖片描述
    右上角切換連線方式(Use HTTPS)

就會出現以下錯誤

The authenticity of host ‘github.com (52.xx.xxx.119)’ can’t be established.RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? //yes
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.

解決方案:需要進行git ssh 配置,登入github,進入要pull的專案中的setting,點選Deploy keys,將本地的ssh 公鑰新增進去,即可。
現在知道這是幹嘛的了,so,以後還是老老實實用HTTPS吧。

  1. git 進行remote add時,提示 fatal: remote origin already exists

解決:先進行 git remote rm origin,再新增即可

  1. push時提示:
Fatal: TaskCanceledException encountered.
  • 在本次操作中,可能是包含大檔案導致的

  • 先進行以下操作

git config --global credential.helper manager
  1. push時提示:You are not currently on a branch
    解決辦法:git checkout master

  2. 如何刪除已經commit的版本中間某個特定版本

參考這篇博文Git 刪除具體某個提交commit的方法