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到底怎麼什麼用處,使用場景?
- 本地庫/遠端庫,本地分支/遠端分支概念界限不清
零散問題
-
add file時出現fatal: Not a git repository (or any of the parent directories): .git錯誤
原因是沒有進行git init,導致沒有生成.git隱藏資料夾。 -
新建分支時,出現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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。
- 在將本地分支推送到遠端庫時,出現fatal: TaskCanceledException encountered
原因未知,執行下列語句可以解決:
$ git config --global credential.helper manager
- 在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,
以後就不會編輯後不知道咋退出啦。
-
git提示modified:xxx(modified content, untracted content)
原因:目錄沒有被跟蹤;
解決:刪除xxx目錄下的.git資料夾即可繼續操作 -
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吧。
- git 進行remote add時,提示 fatal: remote origin already exists
解決:先進行 git remote rm origin,再新增即可
- push時提示:
Fatal: TaskCanceledException encountered.
-
在本次操作中,可能是包含大檔案導致的
-
先進行以下操作
git config --global credential.helper manager
-
push時提示:You are not currently on a branch
解決辦法:git checkout master -
如何刪除已經commit的版本中間某個特定版本
參考這篇博文Git 刪除具體某個提交commit的方法