Git超詳細用法,通俗易懂
阿新 • • 發佈:2020-07-06
建立本地倉庫 和 遠端共享倉庫
- 直接下載安裝包:Git下載地址
- 安裝 git,檢視 git 版本,git version
- 配置專案的 git 賬號
- git config --global user.name "XXX"
- git config --global user.email "[email protected]"> >
- 檢視是否配置成功 git config --list
- 生成並獲取公私祕鑰
- cd ~/.ssh
- ssh-keygen -t rsa -C "[email protected]"
- cat id_rsa.pub 讀取公鑰,存入 gitlab-->setting--> SSH Keys
- 在個人設定頁面,左邊選中SSH and GPG keys,在右邊新增公鑰,title是key的名稱,可以隨便取,可更改,key是上面我們獲取到的公鑰,填寫完畢後點選add SSH key按鈕,這樣遠端就新增到了金鑰。
- 在個人設定頁面,左邊選中SSH and GPG keys,在右邊新增公鑰,title是key的名稱,可以隨便取,可更改,key是上面我們獲取到的公鑰,填寫完畢後點選add SSH key按鈕,這樣遠端就新增到了金鑰。
- 克隆遠端倉庫至本地:ssh方式:這是一種相對安全的方式
- 獲取所拉取專案的 ssh clone 地址
- cd 專案目錄檔案
- git clone ssh://[email protected]
http連線方式
- 這種方式要求project在建立的時候只能選擇“Public”公開狀態,Private和Internal私有模式下不能使用http方式進行連線。(ssh方式在三種模式下都可以),使用http方式直接連線gitlab顯然沒有ssh連線方式安全,但是也可以做些安全設定,比如在gitlab本機的iptables裡做埠限制(如上是8081埠),新增白名單等。
- gitlab上建立的專案倉庫,要注意該倉庫下的members許可權,如果某個gitlab使用者沒有設定在該倉庫members許可權下,則使用該gitlab使用者進行git clone操作可以,但是進行git push則會失敗!報錯:
remote: GitLab: You are not allowed to push code to protected branches on this project
mac 使用者操作命令時報錯:
- 錯誤資訊:
Unhandled rejection Error: EACCES: permission denied
, 表示沒許可權,sudo 一下
本地操作-最最最基本用法
操作 | 命令 |
---|---|
檢視分支 | git branch |
建立分支 | git branch |
切換分支 | git checkout |
建立+切換分支 | git checkout -b |
合併某分支到當前分支 | git merge |
刪除分支 | git branch -d |
強制刪除分支 | git branch -D |
新增檔案至暫存區 | git add (可多次,可多個檔案) |
提交暫存區檔案 | git commit -m <提交資訊> |
拉取遠端至本地 | git pull |
推送本地至遠端 | git push |
檢視提交日誌 | git log |
檢視倉庫當前的狀態 | git status |
版本回退 | git reset --hard commit_id |
回退至上一版本 | git reset --hard HEAD^ |
工作現場“儲藏” | git stash |
檢視儲藏列表 | git stash list |
恢復儲藏區內容 | git stash apply(恢復後,stash內容並不刪除,需用 git stash drop 來刪除) |
恢復儲藏區內容 | git stash pop(儲藏應用並刪除) |
恢復指定的stash | git stash list檢視 git stash apply [email protected]{0} |
多人協作
- push之前,最好先pull一下,因為遠端分支可能會有更新,需要先合併並解決衝突
- 如果git pull提示
no tracking information
,則說明本地分支和遠端分支沒有建立關聯,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
- 檢視遠端庫資訊,使用git remote -v
- git 本地分支 track 遠端分支
- 其實在從遠端分支分出來的分支都是跟蹤分支(track),當對該分支進行 push 和 pull 時,如果該分支和遠端分支同名,git會知道推送到遠端哪個分支,從哪個遠端分支同步到本地分支。其實每次克隆一個倉庫時,本地都會新建一個
master
分支來track
遠端的origin/master
。如果不同名,我們需要人為指定git push origin branch_name
- 如果本地新建了一個分支 branch_name,但是在遠端沒有,這時候 push 和 pull 指令就無法確定該跟蹤誰,一般來說我們都會使其跟蹤遠端同名分支,所以可以利用
git push --set-upstream origin branch_name
,這樣就可以自動在遠端建立一個 branch_name 分支,然後本地分支會track
該分支。後面再對該分支使用 push 和 pull 就自動同步。無需再指定分支。 - 跟蹤遠端分支:如果遠端新建了一個分支,本地沒有該分支,可以利用
git checkout --track origin/branch_name
,這時本地會新建一個分支名叫 branch_name ,會自動跟蹤遠端的同名分支 branch_name。
- 其實在從遠端分支分出來的分支都是跟蹤分支(track),當對該分支進行 push 和 pull 時,如果該分支和遠端分支同名,git會知道推送到遠端哪個分支,從哪個遠端分支同步到本地分支。其實每次克隆一個倉庫時,本地都會新建一個
總結
- 利用 git push --set-upstream origin branch_name 來在遠端建立一個與本地branch_name 分支同名的分支並跟蹤;
- 利用 git checkout --track orgin/branch_name 來在本地建立一個與遠端branch_name 分支同名的分支並跟蹤。
git忽略某些檔案(資料夾)提交
開發過程中有些快取檔案不想提交,但是git已經維護專案了,這時候使用.gitignore檔案忽略也是沒有意義的,並不會起作用,可以使用如下方法忽略檔案或資料夾提交:
- 忽略單個檔案:git update-index --assume-unchanged /path/file
- 恢復跟蹤: git update-index --no-assume-unchanged /path/file
回覆跟蹤使用場景:在拉取程式碼或者切換分支時,提示有改變未被提交或stash
,但是使用git status檢視 提示並沒有檔案更新,git stash 提示 git stash No local changes to save,這時建議檢視一下git提示的有問題的檔案,設定了忽略,用以上命令來恢復跟蹤