一、版本控制
? ? ? 版本控制系統是記錄若干文件內容變化,以便將來查閱修訂特定版本或還原部分文件的系統
? ? ??分為:集中式版本控制系統(svn)簡稱cvcs? ?都有一個單一集中管理服務器,保存所有文件修訂版本,開發人員通過客戶端連到這臺服務器,取出文件或提交更新。會出現中央服務器單點故障!
? ? ? ? ? ? ? ?分布式版本控制系統(Git)簡稱dvcs? ?沒有”中央服務器“,每個人的電腦上都是一個完整的版本庫。安全性更高!但分布式版本控制系統中會有一臺充當”中央服務器“的電腦,方便交換修改。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 有極其強大的分支管理工具!?
? 二、Git幫助與初始化
? ? ? ?$git help? ? ? ? ? ? ? 顯示git的幫助信息
? ? ? ?$git help-a? ? ? ? ? ?加上-a參數可以顯示所有幫助信息
? ? ? ?$git help add? ? ? ? 加上具體命令可查看詳細幫助內容
? ? ? ?$git config --list? ?顯示git的配置信息
? ? ? ?$git config --globol user.name"sunyi"? ? ? ? ? ? ? ? ? ? ? ? ? ? 設置Git的用戶名
?$git config --globol user.email"963807896@qq.com"? ? ? ?設置Git的E-mail
--globol? 表示設置的范圍(系統,項目,全局)
? $git config --unset--globol user.name? ? ? ? ? ? ? ? ? ? ? ? ? ?修改前需要--unset參數清空需要修改的設置
? ? $git init? ?使用init命令可以初始化一個倉庫(repository),同時在當前目錄下生成一個用來跟蹤管理版本庫的的.git文件夾*避免使用含有中文的路徑。
三、 創建版本庫
在git的目錄下添加一個有內容的文本文件
$git status? ? ? ? ? ? 查看當前倉庫工作區的狀態
$git add? ? ? ? ? ? ? ?將新文件添加到倉庫
$git commit? ? ? ? ? 將新文件提交到倉庫? ? ??$git commit -m”提交本次的說明,方便找到改動記錄“? Git完整的添加文件需要先add再commit兩步。
四、本地的版本控制
給文本文件添加一行文本? ? ? 先查看狀態,提示被修改過,但還沒有被準備提交的的修改
?$git diff? ? ? ? ? ? ? ? 查看具體修改內容? ? ? ? 查看完修改后,經過add和commit將修改添加到版本庫
2>? ?版本回退
??$git log? ? ? ? ? ? ? ? 查看commit的記錄? ? ? ?記錄中有提交的作者,email和提交時間以及commit時輸入的-m參數后的文本。其中commit后邊的數字表示commit id(版本號)是一個SHA1計算出來的非常大的數字,用十六進制表示。
? ? ?$git reset--hard HEAD^??? ? ? ?退回到上一個版本? ? ?首先要知道當前版本? 用HEAD表示當前版本 上一個版本就是HEAD^, 上上一個就是HEAD^^? ,往上100個可以寫HEAD~100
? $git reset--hard ID 4da437f 放棄回退? ? ? ? ? ? 必須知道恢復版本的ID號 ,因為git log只存儲最后一次版本之前的版本記錄? 所以需要git reflog來找回之前的版本號?
$git reflog? ? ? ? ? ? ? ? ? ? ? ? ? ? 用來記錄用戶輸入的每一次命令。找回版本號并且撤銷回退。? ? *版本號寫前幾位即可,Git自動查找
3> 工作區和暫存區
工作區即當前目錄下除了.get文件夾下的其他目錄 ?
版本庫即.get文件夾下的東西,其中最重要的就是stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針HEAD。
將文件添加到Git版本庫的時候分兩步執行,首先git add把文件添加進去,實際上就是把文件添加到暫存區,然后git commit提交更改,實際上就是把暫存區所有內容提交到當前分支
4>? ?撤銷修改
撤銷修改分為三種情況:僅修改了工作區的內容,未添加到暫存區(沒有經過add和commit的修改);此時工作區提示有一個修改;$git checkout 文件名,可以還原工作區修改。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 修改了工作區的內容并添加了暫存區,但未提交修改(經過add但未commit的修改);$git reset HEAD 文件名,可以還原暫存區的修改。再使用checkout命令還原工作區。
修改被添加到暫存區并且提交了修改(經過add和commit的修改);此時只需要退回版本即可,$git reset--hard HEAD^ 。
5>? ?刪除文件
在Git中刪除也屬于修改操作,在工作區手動刪除文件之后,工作區和版本庫的文件就一致了,Git會發現用戶刪除了文件,并且告訴用戶哪些文件被刪除了
刪除文件有兩種方法:在工作區刪除文件,然后使用git rm 并且commit? ? ? 執行git rm之前的刪除文件操作僅僅修改工作區,并不會將刪除操作添加到暫存區,可直接用checkout命令撤銷操作即可
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?在Git中直接使用?git rm 命令刪除文件并 commit? ? ? 在commit之前,刪除操作會同時操作工作區和暫存區,在撤銷時先使用reset命令,然后再使用checkout命令撤銷操作。
五、 遠程倉庫
1>? ? 生成SSH Key
$ssh-keygen-t rsa? ?? 使用RSA 方式加上時間參數來生成SSH秘鑰,使用默認設置即可。
成功后可以在用戶主目錄下找到.ssh目錄,里面有id_rsa和 id_rsa.pub兩個文件,其中id_rsa是私鑰,不能泄露!!!id_rsa.pub是公鑰文件,可任意發送。
將生成的id_rsa.pub文件發送給服務器管理員,管理員在服務器將公鑰注冊以后,此計算機即可通過服務器驗證,進而下載上傳文件。請保證id_rsa文件安全!!!
2>? ?遠程下載項目代碼
使用git init 創建一個新倉庫,然后git? pull可以遠程下載項目代碼,(或者直接使用git clone命令拷貝版本庫至本地)。
首次使用Git連接服務器時,會有一個警告,ssh連接第一次驗證服務器的key,輸入yes回車即可。這個警告只出現一次。
3>? ?推送代碼至服務器
git push? ? ? 將當前分支推送至服務器。
六、分支管理
1>? ?創建與合并分支
分支管理命令? ? ?git? branch? ? ? ? ? ? ? ? ? 查看當前分支
??git? branch 名稱? ? ? ? ? ?創建分支
? git checkout 名稱? ? ? ? 切換分支
?? ???git checkout -b 名稱 ? ?創建加切換分支,git會在當前分支前加*
? git merge 名稱 合并某分支到當前分支
??git branch -d 名稱 刪除分支
?2>? ?解決沖突
git status? 告訴我們沖突文件
? git用<<<<<<<,=======,>>>>>>>標記不同分支的內容,修改解決沖突后保存,再提交即可成功合并。
用帶參數的git log 可以看見分支合并情況
git log --graph --pretty=oneline --abbrev -commmit
git stash? ? 把當前工作區”儲藏起來“,等以后恢復現場后繼續工作,使用之后,當前工作區狀態是干凈的
?3>? ?bug分支
?git stash apply? ? 恢復工作區現場,不刪除stash內容
?git stash drop? ? ?手動刪除stash內容
?git? stash pop? ? ? 恢復工作區現場,同時刪除stash內容
七、自定義配置
1>? ?標簽
git tag 名稱? ? ? ? ?添加新標簽
git tag? ? ? ? ? ? ? ? 查看所有標簽
git show 名稱? ? ? 查看對應標簽的詳細提交信息
2>? ?忽略文件
git ignore
?