本文記錄我在使用git時的點滴經驗,以需要實現的功能為出發點,詳細介紹相關命令,希望能為日后參考提供幫助。結合“git命令大全”等全面介紹git命令的文章,可以更深入地掌握git的使用,同時也希望能幫助到有需要的網友。
- Git簡介
Git是一款免費且開源的分布式版本控制系統,適用于管理任何規模的項目。相較于svn集中式版本控制系統,Git的最大特點是其分布式特性。
- Git客戶端下載
在Windows系統下,主要有兩款常用的Git客戶端:一是Git for Windows,二是github Desktop。本文選擇使用GitHub Desktop,并提供了離線安裝包下載。
安裝過程簡單,雙擊安裝程序即可,此處不再贅述。安裝完成后,打開Git Shell便可執行Git命令。值得注意的是,安裝GitHub Desktop后,桌面會出現兩個圖標:
首先,打開GitHub圖標,使用GitHub賬號登錄,GitHub Desktop將幫助我們創建ssh Key,并通過郵件通知我們。如果使用Git for Windows,則需手動設置SSH Key,具體教程見:git使用SSH密鑰。此外,Git for Windows每次更新遠程倉庫時,都需要輸入GitHub用戶名和密碼,解決方法見:git for windows 總是提示輸入用戶名和秘密。
- 命令簡介
3.1 將遠程倉庫克隆到本地
此操作類似于SVN的check out,只有將遠程倉庫克隆到本地,才能對本地代碼進行增刪改后再提交到遠程服務端。
git clone "[your repository path]" //示例:git clone "https://github.com/dablelv/dablelvweb.git"
注:(1)命令中的中括號內容需替換為相應內容,后續命令同理。(2)倉庫地址可在GitHub網站查看,點擊Clone or download按鈕,如下圖所示:
3.2 上傳文件或文件夾至服務端
在本地倉庫新增或修改文件后,需要將文件上傳至遠程倉庫。對于修改后的文件,可以使用git diff [file]命令查看被修改的內容。具體上傳步驟如下:
第一步,克隆遠程倉庫至本地,參考3.1所述。或者在本地新建一個倉庫,然后提交到服務端,具體使用Git命令新建倉庫的步驟將在后文詳細介紹。我通常會在GitHub網站上新建倉庫,這樣較為方便。
git clone "[your repository path]"
第二步,將文件拷貝到該倉庫目錄后,執行以下命令。同時,可以使用git status命令查看當前目錄下文件的狀態,新拷貝的文件會顯示為未跟蹤(untracked)。
//將需要提交的文件或目錄添加到Git的緩沖區 git add [your file or directory] #示例:git add test1.txt test2.txt dir1
第三步,提交文件并添加備注,備注是必需的,否則無法提交。
git commit -m "[備注信息]" //示例 git commit -m "提交新增的文件或文件夾"
第四步,推送文件。
//默認推送到主分支 git push //顯示指明推送到哪個分支,這里推送到主分支master git push origin master
3.3 刪除文件或文件夾
有了上傳文件的完整流程,刪除文件就相對簡單了,直接上命令。
//刪除文件 git rm [files] //刪除目錄 git rm -r [dirs] //提交 git commit -m "[刪除某文件]" //推送 git push
3.4 批量提交修改、刪除和新增的文件或文件夾
在進行修改、刪除和新增操作后,需要提交多個文件或文件夾,此時不必逐個使用git add,這樣效率太低。幸運的是,git add命令提供了以下選項:
git add -A 表示添加所有更新的內容,包括編輯過的,刪除的和新增的文件,-A表示all; git add . 表示添加新文件和編輯過的文件,不包括刪除的文件; git add -u 表示添加編輯或者刪除的文件,不包括新添加的文件,-u表示update。
使用git add -h可以查看git add各命令選項的具體含義。
3.5 git push出現Error: failed to push some refs to ‘倉庫地址’的錯誤
出現此錯誤的原因是遠程倉庫中代碼版本與本地不一致,導致沖突。解決方法是先執行git pull,再執行git push。
git pull的作用是從遠程倉庫拉取最新版本并merge到本地。
參考文獻:
[1]10分鐘學會Git教程 – 安裝Git、建倉庫、添加和推送文件至庫
[2]Git常用命令大全
[3]git add詳解
[4]Git push 報錯 “error: failed to push some refs to ” 解決