區別 | Git | SVN |
---|---|---|
定義 | Git是分佈式版本控制系統 。沒有中央服務器,每一個人電腦上都是一個完整的版本庫。 |
SVN是集中式版本控制系統 ,版本庫是集中放在中央服務器的,幹活的時候先從中央服務器獲得最新的代碼,幹完活你再把本身的代碼推送到中央服務器 |
是否聯網 | Git只有在pull和push等操做的時候才須要聯網。 | SVN只有在聯網的狀況下才能工做。 |
版本記錄 | Git在斷網的狀況下,能夠在本地保存版本記錄。因此合併起來很方便。同時能夠在沒網的狀況下查看開發的版本歷史。 | 在斷網的狀況下,SVN不工做,既不能提交也不能回滾,因此也不會有本地記錄。 |
歷史庫的存放位置 | Git本地倉庫包含代碼庫和歷史庫,在本地的開發環境中就能夠記錄歷史。 | SVN的歷史庫存在中央倉庫,每次對比和提交代碼都必須鏈接到中央倉庫才行 |
Git和SVN的最根本區別在於歷史版本維護的問題。javascript
1、 建立git倉庫的方案
1 、第一種方案:在現有目錄下初始化倉庫
1)建立一個文件夾
mkdir vue
2)在該文件夾下新建倉庫
git init
//此時vue目錄下會出現一個.git的目錄,該目錄是用來跟蹤管理版本的
2、第二種方案:克隆現有的倉庫
git clone git@github.com:tangjie1111/vue.git
2、將本地倉庫跟遠程庫關聯起來(在本地倉庫文件夾下(vue)輸入下面的命名)
1、第一步,在GitHub上面新建一個空的倉庫
Create a new repo
//而後在Repository name填入vue,此時能夠從這個倉庫克隆出新的倉庫,也能夠把一個已有的本地倉庫與之關聯。而後把本地倉庫的內容推送到GitHub倉庫,
2、第二步,將GitHub上的倉庫關聯到本地
git remote add origin git@github.com:tangjie1111/vue.git
//git@github.com:tangjie-93/vue.git是倉庫地址,tangjie1111是該用戶吧帳號名。 origin表示倉庫的名稱
//關聯多個遠程倉庫
git remote add github git@github.com:tangjie-93/learngit.git
//關聯github帳戶爲tangjie-93,名爲github的遠程倉庫
git remote add gitee git@github.com:james/learngit.git
//關聯github帳戶爲james,名爲github的遠程倉庫
3、將遠程倉庫的內容拉取到本地且和本地分支合併
git pull origin master
4、將遠程倉庫的內容拉取到本地
git fetch [remote-name]
//訪問遠程倉庫,從中拉取全部你尚未的數據
5、將當前分支內容推送到遠程分支
git push [remote-name] [branch-name]
git push -u origin master
//將本地庫的全部內容推送到遠程庫。將當前分支master推送到遠程。參數u使得Git不但會吧本地的master分支內容推送到遠程的master分支,還會把本地的master分支和遠程的master分支關聯起來。在之後的推送和拉取就能夠簡話化命令了。以後的推送就能夠不用加u了。
git push origin dev 或者git push origin dev:dev
//表示將當前分支推送到dev遠程分支。origin是默認倉庫名稱,也可使用其餘名稱
git push origin dev:test
//將本地的dev分支內容推送到遠程倉庫上的test分支
6、查看遠程倉庫的名稱
git remote
//查看遠程倉庫的名稱
git remote -v
//查看遠程倉庫的信息
git remote show [remote-name]
//查看某一個遠程倉庫的更多信息
7、取消本地目錄下關聯的遠程庫
git remote rm origin
//刪除已有的遠程倉庫
8、重命名遠程倉庫
git remote rename dev test
9、重命名本地庫
git branch -m current-branch-name new-branch-name
10、在本地新建一個分支來跟蹤遠程分支
git checkout -b serverfix origin/serverfix
git checkout -b sf origin/serverfix
//將本地分支的名字改成sf
git checkout --track origin/serverfix
11、設置已有的本地分支跟蹤一個剛剛拉取下來的遠程分支
git branch -u origin/serverfix
12、將全部的本地分支列出來而且包含更多的信息
git branch -vv
//通常要先將服務器上的數據線拉取過來 git fetch --all
13、刪除一個遠程分支
git push origin --delete serverfix
複製代碼
//對這臺機器上全部的Git倉庫都會使用這個配置,固然也能夠對某個倉庫指定不一樣的用戶名和郵箱
1、配置名字
git config --global user.name "james";
2、配置郵箱
git config --global user.email "14232134576.@qq.com";
3、查看配置列表
git config --list
4、查看某一配置項
git config user.name
5、查看git有哪些命令
git help
git help config //獲取config命令的手冊
6、配置git命令別名
git config --global alias.status st
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
複製代碼
1、查看最近到最遠的提交日誌
git log
//查看提交歷史,以便肯定要回退到哪一個版本
git log --pretty=oneline --abbrev-commit
//僅僅顯示版本號和提交說明 --pretty=oneline表示將提交歷史放在一行顯示 --abbrev-commit在於縮短commit id。
git log --pretty=format:"%h - %an, %ar: %s"
//定製化要顯示的記錄格式
git log --graph --pretty=oneline --abbrev-commit
//以圖的形式展現提交信息合合並信息
2、將當前版本回退到上一個版本
git reset --hard HEAD^ //HEAD指向當前版本
3、回退到指定版本
git reset --hard 1092a //1092a表示版本號的前幾位
git reset HEAD "文件" //把暫存區的修改撤銷掉
4、查看記錄的每一次命令
git reflog //查看命令歷史,以便要回到將來的哪一個版本
5、查看最近幾回提交的內容差別
git log - p -n
//-p表示按補丁格式顯示每一個更新之間的差別
6、查看每次提交的簡略的統計信息
git log --stat
7、限制輸出長度
git log --since=2.weeks
//查看最近兩週的提交
git log --pretty="%h - %s" --author=tangjie-93 --since="2008-10-01"
//查看指定做者指定時間段的提交
8、按指定關鍵字進行篩選
git log -Sgit
//按git關鍵字篩選提交的內容
9、查看最後一次的提交記錄
git log -1
10、查看提交歷史、各個分支的指向以及項目的分支分叉狀況
git log --oneline --decorate --graph --all
11、查看某個文件的修改記錄
git blame 文件名 -L//參數L來檢查須要修改的某幾行。
12、查看以前提交的內容
git show commitId
複製代碼
一、下圖是--pretty=format經常使用選項
vue
二、下面是git log的經常使用選項
java
三、下圖是限制git log輸出的選項
git
1、將工做區的文件添加到暫存區
git add "文件或者目錄"
//其實是把工做區的文件添加到暫存區;或者跟蹤(track)新添加的文件;同時還能用於合併時將有衝突的文件標記爲已解決狀態。該命令可被理解爲"添加內容到下一次提交中"
注意: 執行git add的文件,還沒執行git commit的文件,再次被修改後,須要從新執行git add命令才行。
git commit -m "描述"
//把暫存區的全部內容提交到當前分支。
//注意:提交記錄的是放在暫存區的快照。
2、 將暫存區的文件提交到當前分支
git commit -a -m "描述"
//把已經跟蹤過的文件暫存起來一塊兒提交。
git commit --amend
//用於修改提交內容
3、查看工做區文件的當前狀態
git status //查看工做區的當前狀態
git status -s 或者 git status --short//將當前工做區的轉態信息簡化
4、查看工做區文件和暫存區文件的差別(查看未暫存文件的修改)
git diff //比較當前工做目錄中當前文件和暫存區文件之間的差別。
5、查看暫存區文件和當前分支文件的區別(查看已暫存的文的修改)
git diff --cached git diff --staged //查看提交到暫存區但還沒提交到分支的內容。也就是比較暫存區和倉庫分支裏的區別。
6、查看工做區文件和當前分支最新版本文件的區別
git diff HEAD -- "文件" //查看工做區和版本庫裏最新版本的某個文件的區別
複製代碼
1、將文件在工做區的修改全撤銷
git checkout -- "文件"
//把文件在工做區的修改全撤銷。總之就是讓這個文件回到最近一次git commit或 git add的狀態。分兩種狀況討論:
//狀況1,文件自修改後尚未放到暫存區,撤銷修改後就回到和版本庫同樣的狀態。若是此時你想把剛剛撤銷的內容復原的話,若是此時的編輯器還沒關掉的話,使用撤銷"CTRL+Z"能夠回到撤銷以前的狀態。
//狀況2,文件已經添加到暫存區,如今又作了修改,撤銷修改就回到添加到暫存區後的狀態。
git checkout -- "文件" 中的--很重要,沒有--,就變成了`切換到另外一個分支`的命令。
2、將暫存區的修改撤銷掉,就是撤銷執行了add命令尚未執行commit命令的文件
git reset HEAD "文件"
//將暫存區的修改撤銷掉。使得工做區中文件與當前分支文件同樣。
複製代碼
1、將文件從暫存區中刪除,分爲如下兩步。先刪除,再提交
git rm "文件" //從暫存區中刪除該文件,而且會連帶從工做目錄中刪除指定的文件
git commit -m "delete file" //
git checkout -- "文件" //用版本庫裏的文件替換工做區的版本,不管是修改仍是刪除。
2、若是刪除以前修改過而且已經放到暫存區的話,就必須用強制刪除選項-f 。用於防止誤刪尚未添加到快照區域的數據。
git rm -f "文件"
3、刪除git倉庫中的數據,但文件仍然保留在磁盤中。
git rm --cached "文件"
複製代碼
一、建立和合並github
每次提交,Git都把它們串成一條時間線,該時間線就是分支。master稱爲主分支,master(分支)是指向提交對象的可變指針,HEAD指向的是當前分支
。每次像maste分支r提交,master
分支都會向前移動一步,提交的越多,master分支的線就愈來愈長。 當咱們建立新的分支dev
時,把HEAD
指向當前分支dev
。此時對工做區的修改和提交就是針對dev
分支了,提交一次,dev
分支的指針就向前移動一步,而master指針不變。。
服務器
1、建立分支
git checkout -b dev 或者 git switch -c dev
//至關於下面的兩條執行語句
git branch dev //建立分支
git checkout dev //切換回當分支
2、查看當前分支
git branch //會列出當前全部分支,且當前分支會標記一個`*`號
git branch -a //查看本地和遠程倉庫的全部分支
3、切換分支
git checkout dev或者 git switch dev
4、合併分支
git merge dev //合併某分支到當前分支
5、刪除分支
git branch -d dev
6、強行刪除分支
git branch -D dev
7、建立遠程分支到本地
git checkout -b dev origin/dev
9、將本地分支推送到遠程並在遠程建立相同的分支
git push origin dev:dev
10、刪除遠程分支
git push origin :dev //origin 是遠程倉庫的默認名稱
11、查看每一個分支的最後一次提交
git branch -v
12、查看已經合併到當前分支的分支
git branch --merged
13、查看還沒有合併到當前分支的分支
git branch --no-merged
複製代碼
建立當前分支(以下圖所示)app
在當前當前分支提交,時間線的變化(以下圖所示)編輯器
二、解決衝突分佈式
git log --graph --pretty=oneline //查看分支的合併狀況
1、切換到dev分支,修個文件
vi test.md
git add test.md
git commit -m "modify test.md"
git switch master
git merge dev//合併分支,衝突了
2、解決衝突
vi test.md
git add "test.md"
git commit -m "modify .test.md" //此時自動合併了,此時當前分支上的數據是最新的,若是想在其餘分支上也更新數據,能夠在其餘分支上git merge "其餘分支"使得數據最新
3、一般在合併分支時,Git默認採用的是`Fast Forwar`模式,可是在這種模式下,刪除分支後,會丟掉分支信息。
git merge --no-ff -m "merge with no-ff" dev //表示禁用Fast Formard的方式,`的模式會記錄分支歷史。 -m 是由於本次合併會建立一個新的提交。`no-ff
複製代碼
三、bug分支 fetch
git stash
//將當前工做現場存起來,暫存無法提交的工做現場
git stash list
//查看存儲的列表
git stash apply stash@{0}
//恢復指定的stash,可是stash的內容並無刪除
git stash drop
//刪除stash
git stash pop
//恢復stash的同時也把stash刪除了
git cherry-pick commitid
//複製一個特定的提交到當前分支
git checkout -b branch-name origin/branch-name
//在本地建立和遠程分支對應的分支,名稱最好同樣
git branch --set-upstream branch-name origin/branch-name
//創建本地分支和遠程分支的關聯
git rebase
//將本來分叉的提交歷史變成一條直線。本質上就是把本地未push的分叉提交歷史整理成直線。 使得咱們在看歷史提交的變化更容易些。其實就是把咱們本地的提交放到了別人提交以後了。不足的是本地的分支提交已經被修改過了。
複製代碼
標籤是版本庫的快照,是指向某個commit的指針。目的在於可讓人們更快的記住。
1、建立標籤
git tag "標籤名" //默認是對最新的commit 設置標籤
git tag "標籤名" commitid //對特定commit設置標籤
2、後期打標籤
git tag -a <tagname> -m "blablabla..." commitid
//指定標籤信息 commitid表示版本id
2、查看全部標籤
git tag
git show "標籤名"
//查看該標籤的詳細信息
3、附註標籤
git tag -a <tagname> -m "blablabla..."
//-a表示指定標籤名 -m表示指定說明文字
4、刪除標籤
git tag -d "標籤名"
tit push origin :refs/tags/"標籤名"//能夠刪除一個遠程標籤
5、推送標籤
git push origin "標籤名"
//推送一個本地標籤到遠程倉庫
git push origin --tags
//推送所有未推送過的本地標籤到遠程
複製代碼