一文看懂Git和SVN

2021-10-04 15:57:07 字數 3661 閱讀 2083

git 和 svn 孰優孰好,每個人有不同的體驗。在易用性這方面,svn對於新手來說會更有好一些。但是從另外一方面看,git 命令多意味著功能多,若我們能掌握大部分 git 的功能,體會到其中的奧妙,會發現再也回不去 svn 的時代了。

git  vs  svn

git是分布式的,支援離線工作,在本地可以進行很多操作,而svn是集中式的,必須聯網才能正常工作;git 分支是指標指向某次提交 git 的分支切換非常迅速,並且建立成本非常低,支援本地分支。而 svn 分支是拷貝的目錄,不支援本地分支。

git 的命令很多,日常工作需要的有add,commit,status,fetch,push,rebase等,還必須掌握rebase和merge的區別,fetch和pull的區別等,除此之外,還有cherry-pick,submodule,stash等功能

git提交**步驟:

git add從工作區提交到暫存區

git commit從暫存區提交到本地倉庫

git push或git svn dcommit從本地倉庫提交到遠端倉庫

從本節開始,除特殊說明,以下命令均適用於 git 與 git-svn。

# 在當前目錄新建乙個git**庫

$ git init

$ git clone [url]

# 列舉所有配置

$ git config -l

# 為命令配置別名

$ git config --global alias.co checkout

$ git config --global alias.ci commit

$ git config --global alias.st status

$ git config --global alias.br branch

# 設定提交**時的使用者資訊

$ git config [--global] user.name "[name]"

$ git config [--global] user.email "[email address]"

git 使用者的配置檔案位於 ~/.gitconfig

git 單個倉庫的配置檔案位於 ~/$project_path/.git/config

# 新增當前目錄的所有檔案到暫存區

$ git add .

# 新增指定檔案到暫存區

$ git add ...

# 新增指定目錄到暫存區,包括其子目錄

$ git add # 刪除工作區檔案,並且將這次刪除放入暫存區

$ git rm [file1] [file2] ...

# 停止追蹤指定檔案,但該檔案會保留在工作區

$ git rm --cached [file]

# 改名檔案,並且將這個改名放入暫存區

$ git mv [file-original] [file-renamed]

把檔名 file1 新增到 .gitignore 檔案裡,git 會停止跟蹤 file1 的狀態。

# 列出所有本地分支

$ git branch

# 列出所有本地分支和遠端分支

$ git branch -a

# 新建乙個分支,但依然停留在當前分支

$ git branch [branch-name]

# 新建乙個分支,並切換到該分支

$ git checkout -b [new_branch] [remote-branch]

# 切換到指定分支,並更新工作區

$ git checkout [branch-name]

# 合併指定分支到當前分支

$ git merge [branch]

# 選擇乙個 commit,合併進當前分支

$ git cherry-pick [commit]

# 刪除本地分支,-d 引數強制刪除分支

$ git branch -d [branch-name]

# 刪除遠端分支

$ git push [remote] :[remote-branch]

$ git fetch [remote]

# 顯示所有遠端倉庫 (git only)

$ git remote -v

# 顯示某個遠端倉庫的資訊 (git only)

$ git remote show [remote]

# 增加乙個新的遠端倉庫,並命名 (git only)

$ git remote add [remote-name] [url]

# 取回遠端倉庫的變化,並與本地分支合併,(git only), 若使用 git-svn,請檢視第三節

$ git pull [remote] [branch]

# 取回遠端倉庫的變化,並與本地分支變基合併,(git only), 若使用 git-svn,請檢視第三節

$ git pull --rebase [remote] [branch]

# 恢復暫存區的指定檔案到工作區

$ git checkout [file]

# 恢復暫存區當前目錄的所有檔案到工作區

$ git checkout .

# 恢復工作區到指定 commit

$ git checkout [commit]

# 重置暫存區的指定檔案,與上一次 commit 保持一致,但工作區不變

$ git reset [file]

# 重置暫存區與工作區,與上一次 commit 保持一致

$ git reset --hard

# 重置當前分支的指標為指定 commit,同時重置暫存區,但工作區不變

$ git reset [commit]

# 重置當前分支的head為指定 commit,同時重置暫存區和工作區,與指定 commit 一致

$ git reset --hard [commit]

# 新建乙個 commit,用於撤銷指定 commit

$ git revert [commit]

# 將未提交的變化放在儲藏區

$ git stash

# 將儲藏區的內容恢復到當前工作區

$ git stash pop

# 檢視工作區檔案修改狀態

$ git status

# 檢視工作區檔案修改具體內容

$ git diff [file]

# 檢視暫存區檔案修改內容

$ git diff --cached [file]

# 檢視版本庫修改記錄

$ git log

# 檢視某人提交記錄

$ git log --author=someone

# 檢視某個檔案的歷史具體修改內容

$ git log -p [file]

# 檢視某次提交具體修改內容

$ git show [commit]

一文看懂kylin

kylin到底解決了什麼關鍵問題 要徹底的解決掉資料查詢時間隨著資料量的增長而成線性增長的規律 kylin適合哪類資料的處理 通常查詢資料,一般是統計結果,如果是統計結果,必然會按照維度來進行聚合,kylin的工作原理是多維立方體分析,適合需要從多個維度來觀察資料的查詢。維度,看資料的角度,比如地區...

一文看懂xml

先簡單介紹下html xml xpath 1.html 超文字語言,用來展示資料。2.xml 可擴充套件標記語言,用來傳輸資料。僅僅是純文字,標籤可自定義。3.xpath 專門在xml中查詢資訊的語言。xml 文件必須包含根元素。該元素是所有其他元素的父元素。xml 文件中的元素形成了一棵文件樹。這...

一文看懂條件編譯

條件編譯概述 就是在滿足一定的條件時才對源 進行編譯。條件編譯一般有3種形式 形式一 a ifdef 識別符號 識別符號定義時,執行程式段1,否則執行程式段2 程式段1 else 程式段2 endif b ifdef 識別符號 程式段1 endif 例如 define k 1 ifdef k pri...