Git及Github基礎彙總
功能 | 命令 | 備註 |
初始化Git倉庫 | git init | 需要提前cd到你預期的git倉庫目錄。命令執行之後會在當前目錄生成一個.git的隱藏檔案,用來追蹤管理版本庫。 |
暫存檔案 |
git add [檔名] | 如果沒有任何顯示,則說明新增成功 |
把檔案提交到倉庫 | git commit | 還可以git commit -m [ commit說明]方便從歷史記錄中找到改動記錄,命令執行成功之後會提示:1 file changed,2 insertions(一個檔案改動,插入了兩行內容) |
提交當前目錄中的所有檔案 |
git commit . | |
把本地的修改推送到伺服器 | git push | |
顯示最近到最遠的提交日誌 | git log | --pretty=oneline 引數可以讓顯示更加的直觀 |
列出還沒有被git管理的檔案和被git管理且被修改但是還未提交(git commit)的檔案 |
git status | 輸入git status之後 |
撤銷對尚未暫存檔案的修改 | git check out --<檔名> | 該操作不可逆,需要謹慎使用。 |
對暫存的檔案進行撤銷,返回到未暫存的狀態 | git reset HEAD --<檔名> | 簡而言之就是git add的反義詞 |
從遠端倉庫同步程式碼到本地 | git pull | |
詳細檢視原生代碼都有那些改動 | git diff | 也就是檢視修改了,但未暫存(add)的檔案,當使用git add之後git diff就不會再顯示內容 |
重新命名檔案 | git mv Newfile Renamefile | 指令的意思就是將檔案Newfile,重新命名為Renamefile |
檢視所有提交的差異 | git log -p | 使用git log -p -1可以用來檢視最近一次提交的差異 |
從版本庫中刪除該檔案 | git rm <檔名> | 在檔案管理器中手動刪除之後,git就會知道你刪除了檔案,此時可用git status檢視。如果要從版本庫中刪除,就使用git rm <檔名>並使用git commit。當檔案被誤刪的時候(假如此時還沒有git commit,此時就可以使用git checkout <檔名>來回覆被刪除的檔案) |
用版本庫中的檔案替換當前工作區中的檔案 | git checkout -- <檔名> | 版本庫就是github上的檔案,工作區就是本地repo。 |
- git之所以要分add和commit兩步,優點是在於add一次可以add很多不同的檔案,而commit一次可以提交很多的檔案
- clone:把在伺服器是那個託管的專案/程式碼克隆到本地
- git add:告訴git哪些檔案是需要進行版本控制的
- git commit:把程式碼的改動提交到版本控制中(此時的提交只是提交到本地,並沒有提交到伺服器上)
- commit之後在vim中會開啟一個日誌視窗,此時可以將自己的提交日誌寫在裡邊(描述性很強的提交日誌很有利於將來的版本追蹤)
關於.gitignore:
.gitignore顧名思義,就是用來配置git忽略版本控制的檔案。格式規範如下:
- 所有的空行和“#”開頭的檔案都會被git忽略,也就是.gitignore中的註釋。
- 可以使用標準的glob模式匹配(其實我不懂glob是什麼,類似簡化後的正則表示式)
- 匹配模式最後跟反斜槓“\”,說明這是要忽略的目錄。
- 要忽略指定模式意外的檔案或目錄,可以在模式前加上“!”來表示取反。
- *: 星號(*)是萬用字元,比如bulid/* 意思就是忽略build目錄下的所有檔案,*.c 的意思就是忽略所有後綴為.c的檔案
關於git status:
git status可以顯示出當前目錄所有還沒有被git管理的檔案和被git管理且被修改但還未提交(git commmit)的檔案。
git status相關名詞解釋
檔案狀態 | 解釋 | 備註 |
changes not stagged for commit | 檔案被修改了,但是還沒有在提交(commmit)之前進行儲存(stagged) | 在彈出此條資訊之後,git會給出提示使用git add <檔名> 或者 git checkout -- <檔名> |
untracked | 剛剛在本地倉庫建立的新檔案處在未被跟蹤的狀態 | 此時git會提示可以使用git add <檔名>之後新增到commit中去,或者可以直接使用git commit -a來直接進行提交(反之,git commit -a 只對狀態為M的檔案有效) |
Your branch is ahead of 'orgin/master' by 2 commits | 本地倉庫已經領先遠端的主分支2個提交。 | 可以使用git push操作來發布本地的提交熬 |
在熟練使用git status之後還可以使用git status -s來檢視簡寫的狀態。此時M ---被修改,A ---被新增,D ---被刪除,R ---重新命名,?? ---未被追蹤
關於git push:
git clone的時候有https和ssh兩種方式,兩種方式傳輸的傳輸方式暫不做研究討論。在配置好ssh-key的情況下,ssh-key,預設是不需要帳號和密碼的。(可以通過git config --list來檢視是否配置了ssh-key)
關於配置和操作遠端倉庫的常用指令
功能 | 命令 | 備註 |
檢視目前現有的遠端倉庫 | git remote -v | 這樣檢視到的遠端倉庫地址格式是https格式 |
新增新的遠端倉庫 | git remote add <遠端倉庫地址別名> <url> | |
刪除別名為orgin的遠端倉庫 | git remote rm orgin | 刪除之後再次使用git remote -V時,就會發現名為orgin的遠端倉庫已經被刪除 |
將遠端倉庫上名為orgin_ssh的倉庫改名為 orgin | git remote rename orgin_ssh orgin | |
檢視push到遠端的分支上 | git remote show orgin | |
配置免密碼提交:
在使用Git進行開發的時候,我們可以使用ssh url或者http url來進行原始碼的(clone/push/pull),二者的區別是,使用ssh url需要進行本地配置ssh key,這也就意味著你必須是開發者或者有一定的許可權,每次的程式碼同步不需要進行輸入使用者名稱和密碼的操作。http url相對就寬鬆一些。但是需要在每次同步操作的時候輸入使用者名稱和密碼。為了省去每次輸入密碼的重複步驟可以新建一個本地檔案來儲存使用者名稱和密碼,當第一次輸入之後,使用者名稱和密碼就會被儲存起來,今後同步的時候不再需要。
在Git的官網介紹了這種實現,通過一個叫做credential helper。可以理解成證書或者憑證。它幫我們儲存了credential(憑證,裡邊包含了使用者名稱和密碼)。
在執行git config --global credential.helper store,在第一次輸入密碼之後,今後同步就不再需要使用者名稱和密碼了。