Git&GitHub之命令行操作
Git作爲分佈式版本控制工具,分支操作是其最大殺器,這點與集中式版本控制工具SVN大不相同,且大部分操作可在本地完成,並不需要聯網,除非用到GitHub或碼雲這些遠程庫,下面我們就來學習一下這個強大的版本控制工具吧,首先來體驗一波命令行的魅力。
1、Git的一般結構(這裏不包括分支)
2、Git操作的具體流程
本地提交
前提:下載並安裝好git工具
首先先創建一個項目,並利用Git Bash進入命令行界面。
使用命令初始化爲git項目:git init
之後會出現一個.git文件夾,說明初始化成功
設置一個系統級別的簽名,顧名思義,設置一次,以後的項目就不用設置了
需要設置用戶名和郵箱,文件信息保存在家目錄下:~/.gitconfig
命令:git config --global user.name 用戶名
git config --global user.email 郵箱地址
新增一個文件,並從工作區添加到緩存區中
命令:git add [文件名]
查看文件的狀態可以用以下命令,綠色則代表已經在緩存區了,紅色則還沒add添加,沒顯示的話,那就是在本地庫中了。
命令:git status
再把文件從緩存區添加到本地庫,其中-m參數所帶的提交信息是必須
命令:git commit -m "提交信息" [文件名]
以上操作就是把文件提交到了本地庫了
遠程提交
先去GitHub創建一個項目
地址分爲兩種方式:
第一種:HTTPS:提交時需要輸入GitHub的用戶名和密碼
第二種:SSH:在提交時需提前在本機生成一個密鑰,然後去GitHub上面綁定,以後的提交都不需要做任何操作。密鑰生成的地址在家目錄下:~/.ssh/id_rsa.pub文件
SSH生成密鑰的命令:ssh-keygen -t rsa -C [郵箱名]
位置:頭像->setting->SSH and GPG keys->New SSH key,把密鑰粘貼進去就行
回到git bash先給遠程地址名創建別名,因爲一直用那麼長的地址提交很是不方便
命令:git remote add [別名] [遠程地址名]
這時就可以正式推送給遠程庫了
命令:git push [遠程地址別名] [本地分支名]
以上的操作就完成了項目的遠程提交了
遠程拉取
遠程拉取分爲兩種:
第一種:pull
命令:git pull [遠程地址別名] [遠程分支名]
pull拉取需要本地已經創建好了倉庫,然後去拉取遠程的內容,相當於fetch和merge的綜合操作。一般用於拉取自己已經push過的項目
第二種:clone
命令:git clone [遠程地址名]
clone拉取不需要本地的任何操作,拉取下來的同時也會同時初始化完成。一般用於去github拉取別人的項目
下面就演示下git clone,以github上一個優秀項目爲例,git pull同理
開始clone
clone完成
Git的版本切換
想要切換版本,必須要查看歷史版本
命令:git reflog
或git log、git log --pretty=oneline、git log --oneline
切換版本(前面第一列的值代表局部索引值,唯一表示該版本)
命令:git reset --hard [局部索引值]
參數:--hard:本地庫移動HEAD指針,重置暫存區,重置工作區(三個區都切換了版本)
--mixed:本地庫移動HEAD指針,重置暫存區(兩個區切換了版本,不加參數就默認mixed)
--soft:本地庫移動HEAD指針,重置暫存區(僅一個區切換了版本)
切換到第二次提交的版本,局部索引值:21e0672
Git的分支管理
Git的分支圖
創建分支:git branch [分支名]
查看本地分支:git branch -v
查看本地和遠程分支:git branch -v -a
切換分支:git checkout [分支名]
在新的分支上增加點內容,再合併(記得add並commit纔算新增內容到本地庫)
合併分支:git merge [有新內容分支名](前提是已經切換到被合併的分支)
衝突:若在hot_fix修改某一行數據時,master也恰好在修改同一行數據,在合併merge時就會發生衝突,這時的衝突git是無法自動幫我們解決的,需要手動解決衝突,該保留哪些數據,要人爲決定
解決衝突步驟:
第一步:編輯衝突文件,刪掉髮生衝突後自動增加的特殊符號,並主觀保留hot_fix還是master修改後的內容,保存退出。
第二步:git add [文件名]
第三步:git commit -m "提交信息" (這時不能帶文件名,否則會發生錯誤)