集中式版本控制系統---中央服務器(不安全)--圖書館借書--必須要聯網--提交代碼到中央
CVS
SVN
----受限與網絡,回退,多版本分支
Maven--https://mvnrepository.com
分布式版本控制系統-----git----這個 “中央服務器” 只是為了方便大家“交換”修改,每個人的電腦上都是一個完整的版本庫(安全),不需要聯網--提交代碼到本地
1 配置全局屬性-用戶名密碼
git config --global user.name "----"
git config --global user.email "---"
git config --list
git config -l
2設置倉庫目錄--初始化
該目錄下直接 git init 生成隱藏文件夾*.git
或者git init --bare 直接是設置git倉庫,不生成隱藏目錄--用於搭建自己git遠程服務
3 倉庫基本操作
a 當前倉庫狀態 git status
b 添加暫存庫 git add 文件名/批量全部添加 git add .
c 提交到本機本地版本庫 git commit -m ”注釋"
不區分暫存庫版本庫,一步直接提交到版本庫 git commit -a -m "注釋"
* 查看文件改動 git diff 文件名
* 查看文件提交棧歷史 git log 文件名--可得到 commit ID--用於版本回退
注意:
git 三區-工作區 暫存庫 版本庫Master --歷史穿越HEAD
雖是同一文件,但要注意不同區域的修改!提交的結果
添加后再修改,然后提交。此時后面的提交不應被提交。提交的是第一次添加的結果。
* 版本穿越--回退切換--commit ID 與Master分支上的HEAD指針
git log --pretty =oneline
HEAD指的是當前正在使用的版本。最新的提交點
改變了HEAD的指針--回退指定版本-- git reset --hard~1
* 查看刪除的提交點日志 git reflog 針對版本的操作,恢復指定版本
git reset --hard id值 提交點就是恢復點
* 撤銷修改
未add--工作區撤銷--git checkout 文件名
已add未commit--暫存區撤銷--先撤到工作區,再回退內容
git reset HEAD 文件名 + git checkout 文件名
區域操作
工作<——>暫存 git add /git reset HEAD
暫存——>master分支 git commit
* 文件刪除
工作區 del 文件名 再提交 git commit -a -m "刪除"
再恢復文件 git reflog --> git reset --hard id值
未提交 git checkout 文件名
總結:工作區恢復checkout,Master分支上用版本穿越git reset --hard id值
遠程倉庫服務器----國內外代碼托管網站----在線的基於Git的代碼托管服務平台
github
git remote add origin git@github...
git push -u origin master
注意倉庫初始化,遠程初始化就克隆,遠程沒有初始化就本地初始化然后推送過去
gitee
......
模塊代碼與分支代碼
每個模塊可能都有不同分支
多個模塊多個分支
* 分支創建與合並
Git規定所有要使用的分支將其定義在Master分支上。Master里的代碼是提供給用戶使用的,穩定!
開發過程會不斷變化調試。所有的合作開發要在子分支上。最后反合主分支!
維護開發必須要在原有基礎上創建新的分支!
查所在模塊本地分支 git branch
在該版本庫創建新分支名 git barach 分支名 (在最后一個提交點創辦的)
切換分支 git checkout dev分支名 (HEAD指向修改)
在新分支上開發---新分支比master分支代碼更多
開發完畢,切回主分支開始 分支合並/代碼返合/
git checkout master 合到哪,切到那!
git merge 分支 即快速合並,前提條件,master分支沒有任何變化
其實改變master指向最方便(Fast-forward),HEAD指向隨當前分支/操作而改變!
git push -u origin(指代遠程) 分支名如master
git push -u origin dev 將分支提交到遠程后,在github就可以看見分支信息
* 本地庫刪除分支 git branch -d 分支名
遠程庫也刪除
git push orgin --delete 分支名 直接刪除
git push orgin:分支名 推送空分支覆蓋
沖突修改----一個文件被多人修改
git checkout -b dev ==創建並切換到那個分支
git merge 分支名 -->出現conflict,同時該分支上的文件內容會有標記!
解決沖突后,查狀態,再git commit -a -m ""
分支合並模式
git log --graph --pretty=oneline
Fast-forward 提交方式沒有提交點!不會產生提交信息!
git merge --no-ff -m "注釋" 分支名 ; “-no-ff” 參數即no fast forward模式
實際中,master分支上不允許進行開發,master分支是要提供給客戶,最終形式發布的!
所有人在dev分支上合並后,並且調試完畢后,在合並到主分支,進行測試回歸,最后發布!要使用“-no-ff” 參數 即 no fast forward模式。產生新的提交點!
工作區暫掛,當前分支沒搞完,要緊急去處理另一分支的修改提交。
git stash 暫存分支
git stash list
* 恢復掛起
恢復掛起的工作區 git stash apply + 刪除暫掛區 git stash drop
直接一步到位 git stash pop 恢復工作區+刪除暫掛區
在主分支上 刪除 其他分支!(自己不能刪自己) 但git branch -d 分支名->該分支未合並,不允許刪除!
分支沒合並就刪除,用強制刪除 -D
補丁分支----不用分支合並,應用補丁修改主干分支
git diff master > patch 命令行管道輸出流,輸出patch文件
到master分支上應用這個補丁信息 ,git apply patch ,再添加提交推送(還不如直接在主分支上改)
修改需要通知遠程開發者本人
git format-patch -M master 該版本目錄下會多了一個*.patch文件,里面記錄了修改者及代碼修改內容等信息
把這個補丁拿到主干master分支上應用 git am *.patch ,再添加提交推送
* 抓取github上xx分支,且變為本地 yy分支
關聯分支 git checkout -b yy origin/xx
git pull 抓取失敗
git branch --set-upstream-to=origin/xx yy
git pull 可以抓取
標簽
git tag
git tag v1.0
git log --pretty=oneline --abbrev-commit
git tag v0.1 7f111fe(commit id)
git tag v0.1 -m "注釋"
git show v1.0
git push origin v1.0
git push origin --tags
本地 git tag -d v0.1
遠程 git push origin :refs/tags/v1.0
搭建git私服---略
圖片參考鏈接 https://myslide.cn/slides/3023?vertical=1
命令參考鏈接 lxh