Git痛點講解 不斷完善中

2021-08-13 21:02:13 字數 4065 閱讀 4505

在使用git的過程中,有時可能會有一些誤操作,比如:執行checkout -f 或 reset -hard 或 branch -d刪除乙個分支,結果造成本地(遠端)的分支或某些commit丟失。這時,我們可以通過reflog來進行恢復,前提是丟失的分支或commit資訊沒有被git gc(cd30天)清除。一般情況下,gc對那些無用的object會保留很長時間後才清除的。reflog是git提供的乙個內部工具,用於記錄對git倉庫進行的各種操作,可以使用git reflog或git log -g命令來看到所有的操作日誌。

1.1 通過 git log -g 命令來找到我們需要恢復的資訊對應的commit_id,可以通過提交的 版本id,注備,時間,日期來辨別(黑色處為個人隱私)。

1.3 這樣丟失的東西會恢復到reserve_branch 分支上了,然後切換到reserve_branch分支,一會檔案就被開發工具檢查到,可以用git push origin head -u將本地分支推送到遠端~

在專案開發過程中,突然心血來潮想把某些目錄或檔案加入忽略規則,按照上述方法定義後發現並未生效,原因是.gitignore只能忽略那些原來沒有被track的檔案.

如果某些檔案已經被納入了版本管理中,則修改.gitignore是無效的。那麼解決方法就是先把本地快取刪除(改變成未track狀態),然後再提交(藍色檔案為加入了版本控制的,灰色為.gitgnore過濾後的不可新增版本控制):

# 1.清理本地快取(改變成未被追蹤狀態)
$ git rm -r --cached .

# 2.把工作時的所有變化提交到暫存區 :

包括檔案內容修改(modified)以及新檔案(new),但不包括被刪除的檔案。(會通過 .gitgnore 過濾)

$ git add .

# 3.將快取區更新到本地倉庫
$ git commit -m 『update .gitignore』

https_git連線方式 :https其實是有兩部分組成:http + ssl / tls,也就是在http上又加了一層處理加密資訊的模組服務端和客戶端的資訊傳輸都會通過 ssl / tls 進行加密,所以傳輸的資料都是加密後的資料。具體是如何進行加密,解密,驗證的,且看下圖。

詳細參考位址!!!:

ssh_git連線方式 (安全外殼傳輸協議):非對稱加密(rsa)演算法進行傳輸,使用非對稱加密(rsa)演算法需要兩個金鑰:公開金鑰(publickey)和私有金鑰(privatekey)。公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密;如果用私有金鑰對資料進行簽名,那麼只有用對應的公開金鑰才能檢驗。因為加密和解密使用的是兩個不同的金鑰,所以這種演算法叫作非對稱加密演算法,可防止資料傳輸時被第三方截獲後修改。

詳細參考位址 :

ssh連線: 在電腦上生成公鑰與私鑰,並告知給本地和**託管平台,本地git客戶端在push時會用私鑰簽名,**託管平台會用公鑰檢驗,pull時**託管平台會用公鑰加密.然後本地git客戶端會用私鑰解密,這就是ssh公私鑰加密演算法~

(rsa演算法)效能是非常低的, 原因在於尋找大素數、大數計算、資料分割需要耗費很多的cpu週期 , 但是安全性很高。

https連線 :ssl介於應用層和tcp層之間。應用層資料不再直接傳遞給傳輸層,而是傳遞給ssl層,ssl層對從應用層收到的資料進行加密,並增加自己的ssl頭。只在第一次握手時使用非對稱加密,通過握手交換對稱加密金鑰,在之後的通訊走對稱加密tls/ssl中使用了非對稱加密,對稱加密以及hash演算法。

1.1在本地生成ssh 公鑰與私鑰~

首先確保你的伺服器已經成功設定自己的使用者名稱和使用者郵箱

git config --global user.name "yourname"

git config --global user.email "[email protected]"

設定成功後(根據使用者名稱和郵箱生成公鑰與私鑰)!!!

ssh-keygen -t rsa -c 「**託管平台的郵箱@qq.com」

按3個回車,密碼為空,大功告成。

1.2.cat ~/.ssh/id_rsa.pub:檢視是否已經有了ssh公鑰

1.3. [在**託管平台新增ssh公鑰: 把公鑰複製進ssh公鑰管理]

clip < ~/.ssh/id_rsa.pub

執行後將公鑰被copy在剪下板上,ctrl+v到公鑰鑰管理處

1.4.告知私鑰到本地

ssh-add ~/.ssh/id_rsa

如果在這個過程中出現異常[could not open a connection to your ]:

(!!!注意: ssh-agent 周圍加上兩個` ,markdown語法無法顯示雙點!!!)

執行eval ssh-agent

再次執行ssh-add ~/.ssh/id_rsa成功 ssh-add -l 檢視 如果有新加的rsa出現就ok:

1.5.測試:(注意 [email protected]為本人的**託管平台)

ssh -t [email protected]**(git@你的**託管平台**) **

若返回:welcome to git@osc, 「使用者名稱」!

則說明新增成功了!!!若不成功請移步下一條

1.6.ssh-keygen -t rsa -c "***x@***.com"

ssh -t [email protected] //報錯

提示warning:warning:permanently added 『git@』 to the list of known hosts permission denied (publickey)錯誤。

解決方案:

在當前使用者目錄下建立檔案~/.ssh/config,並給檔案新增以下內容

userknownhostsfile ~/.ssh/known_hosts

1.7、更改專案clone位址(如果用https關聯過前提下):

vi .git/config

修改url =

改為url = git@***.com/name/project.git

Debian技術筆記 不斷完善中

debian技術筆記 不斷完善中.ssh部分 1.關閉dns掃瞄,加速遠端使用者登入 修改 etc ssh sshd config 在檔案最後新增usedns no然後重啟,etc init.d ssh restart 2.通過ssh傳輸檔案 傳送本地檔案到遠端主機上 scp var temp te...

常用Linux 命令 不斷完善中

1 kill 所以名字匹配 的程序 ps aco pid,cmd awk xargs kill netstat n awk tcp end 使用 uniq,輸出結果同上,在寫法上更簡潔 效能更好 netstat an awk tcp uniq c 3 當使用vi 編輯某個檔案後發現沒有許可權儲存的時...

部落格導讀(整理思路,不斷完善中)

經過一段時間的胡寫亂畫,不知不覺寫了50多篇隨筆 當然都很隨意,很多流水帳,不少都是為了給自己乙個提醒作用的 檢視了一下,發現有需要開始整理自己的思路,學習方向,學習系列。於是有下面的想法 整體隨筆分下面幾大類 前端開發 js框架學習 後台開發 休閒 成長總結 發發牢騷 部落格diy 1.實現隨便的...