中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

常用的svn和git命令

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

版本管理基本上是多人協(xié)作開發(fā)中必不可少的工具,常用的版本管理工具有:svn和git。雖然都有可視化的工具幫助我們使用這些工具,然而當(dāng)你用上命令行之后,我想你會選擇拋棄這些可視化工具。下面是我整理的一些常用的svn和git命令。

git&svn

Svn篇

首先你可以通過svn help/h來查看幫助信息。

開始工作

檢出(checkout)服務(wù)器數(shù)據(jù)到本地

你剛?cè)肼氁患夜,或新加入某個團(tuán)隊,立馬參與到一個項目中,那么就得獲取項目代碼,開始你的項目生涯。這個時候一般你需要檢出項目代碼:

svn checkout/co [directory] project(本地目錄名,可選) // 檢出版本3 svn checkout/co –revision/r 3 [directory] project(本地目錄名,可選) 

接著你就可以通過svn info來查看版本信息了。

導(dǎo)入(import)項目

有時候項目尚未創(chuàng)建,你需要將本地的目錄放到SVN版本倉庫中:

svn import project(本地目錄名) [directory] 

然后可以通過svn list/ls確認(rèn)已經(jīng)在版本倉庫中了。

更新

每次你開始編碼前,你都最好先更新下本地的工作目錄:

cd project svn update/up // 更新到版本3 svn update/up –revision/r 3 

這樣你就可以在新的項目代碼基礎(chǔ)上工作了。

修改

可能你寫了一個新的模塊,增加了一些新的文件,需要納入項目的版本控制:

svn add index.html list.html ... 

可能你發(fā)現(xiàn)某個模塊已經(jīng)陳舊了,不再使用了:

svn delete/del/remove/rm hello.html 

可能你發(fā)現(xiàn)一個模塊的命名不太合理,需要改名:

svn move/mv main.css common.css 

可能你要創(chuàng)建一個新的較大的模塊,需要新增目錄:

svn mkdir list 

可能你發(fā)現(xiàn)要寫的模塊代碼似于舊的模塊,直接復(fù)制整個代碼:

svn copy/cp users/list.js list/list.js 

檢查

忙碌的一天過去了,或者一個任務(wù)完成了,這個時候一般會將你的工作成果,也就是代碼更新到版本倉庫。

習(xí)慣上會先檢查下修改狀態(tài):

svn status/stat/st 

看到一些SVN狀態(tài)位信息,確認(rèn)是修改了哪些文件,之后一般會自己code review一下代碼的改動,可能有的人會習(xí)慣直接用SVN方式來查看:

svn diff/di folder(本地目錄名,可選,默認(rèn)當(dāng)前目錄) // 查看index.html當(dāng)前版本和版本3的差別 svn diff/di –revision/r 3 index.html // 查看index.html版本3和版本4的差別 svn diff/di –revision/r 3:4 index.html 

一般來說這個時候,沒有什么特殊情況,就直接進(jìn)入“提交”階段了,然后結(jié)束一個工作日或工作周期,但難免會有些特殊情況出現(xiàn)。

取消修改

當(dāng)你code review完后,發(fā)現(xiàn)有些改動不滿意,你可能又會取消這些修改:

svn revert index.html // 回滾整個目錄 svn revert . -R/--recursive 

分支操作

創(chuàng)建分支

創(chuàng)建一個分支

svn copy/cp svn://xxx.com/repo/trunk svn://xxx.com/repo/branches/test -m 'make branch test' 

把工作目錄轉(zhuǎn)到分支

svn switch/sw svn://xxx.com/repo/branches/test 

當(dāng)然,也可以再轉(zhuǎn)到主干svn switch/sw svn://xxx.com/repo/trunk。

給分支打標(biāo)簽

復(fù)制最新的發(fā)布分支為標(biāo)簽:

svn copy/cp svn://xxx.com/repo/branches/test svn://xxx.com/repo/tags/test_tag 

合并一個分支到主干

查找到分支版本

cd branches/test(分支目錄) svn log –stop-on-copy 

最后一個r11340就是創(chuàng)建分支時的reversion,也可:

cd trunk(主干目錄) svn -q –stop-on-copy svn://xxx.com/repo/branches/test(分支url) 

這條命令會查詢出自創(chuàng)建分支以后分支上的所有修改,最下面的那個版本號就是我們要找的版本號。

合并到主干

cd trunk(主干目錄) svn merge -r 11340(分支版本):HEAD svn://xxx.com/repo/branches/test(分支url) 

兩個分支合并

假設(shè)99是從舊主干引出,100打完tag,表示是新主干。

合并最新代碼的意思是:將新主干與舊主干比對,并添加到99中。這樣99既有自己的新增的代碼,也同時有最新線上的代碼。

cd 99_Branch svn merge svn://xxx.com/repo/tags/project_Old_BL svn://xxx.com/repo/tags/project_New_BL svn ci -m 'merge 100 trunk' 

但是后來,其他人又向100提了代碼,所以還需要將100分支(即打了tag后的100,打了tag前的100已是主干)合并至99中。

合并辦法:找出100分支,比對與新主干之間的差別,并添加到99中。這樣99就有最新的全部代碼了。

cd 99_Branch svn merge svn://xxx.com/repo/tags/project_New_BL svn:/xxx.com/repo/branches/100_Branch svn ci -m 'merge 100 branch' 

發(fā)布

給當(dāng)前主干打個標(biāo)簽,并且這個標(biāo)簽不再改動了,但是實際上標(biāo)簽和分支是一個意思,你可以在標(biāo)簽上繼續(xù)做改動,但這不推薦。

svn copy/cp svn://xxx.com/repo/trunk svn://xxx.com/repo/tags/RB-1.0 

合并主干到分支

svn merge -r LastRevisionMergedFromTrunkToBranch:HEAD svn:/xxx.com/repo/branches/99_Branch 

解決沖突

當(dāng)發(fā)生沖突的時候,會提示如下信息:

Conflict discovered in ‘index.html’.

Select: (p) postpone, (df) diff-full, (e) edit,

(mc) mine-conflict, (tc) theirs-conflict,

(s) show all options:

svn detects that theres a conflict here and require you to take some kind of action.

如果你輸入s選項,則會列出所有svn解決沖突的選項,如下所示:

(e) edit - change merged file in an editor #直接進(jìn)入編輯

(df) diff-full -show all changes made to merged file #顯示更改至目標(biāo)文件的所有變化

(r) resolved -accept merged version of file

(dc) display-conflict -show all conflicts(ignoring merged version) #顯示所有沖突

(mc) mine-conflict -accept my version for all conflicts (same) #沖突以本地為準(zhǔn)

(tc) theirs-conflict -accept their version for all conflicts (same) #沖突以服務(wù)器為準(zhǔn)

(mf) mine-full -accept my version of entire file (even non-conflicts) #完全以本地為準(zhǔn)

(tf) theirs-full -accept their version of entire file (same) #完全以服務(wù)器為準(zhǔn)

(p) postpone -mark the conflict to be resolved later #標(biāo)記沖突,稍后解決

(l) launch -launch external tool to resolve conflict

(s) show all -show this list

一般我們會選擇p稍后解決沖突,這樣會生成三個文件:.mine, .rOLDREV, .rNEWREV。比如:

index.html index.html.mine index.html.r1 index.html.r2 

解決沖突方法大致有一下幾種:

手工修改index.html文件,然后將當(dāng)前index.html作為最后提交的版本

svn resolve index.html –-accept working 

選擇base版本,即index.html.rOLDREV作為最后提交的版本

svn resolve index.html –-accept base 

使用index.html.rNEWREV作為最后提交的版本

svn resolve index.html –-accept theirs-full 

使用index.html.mine作為最后提交的版本

svn resolve index.html –-accept mine-full // 或者用下面這條命令也可以 // svn resolve index.html –-accept theirs-conflict 

提交代碼

最后,一切確認(rèn)沒問題了:code review完畢,自己覺得代碼滿意了;然后也合并完別人的修改并且沒有沖突了。那么就提交代碼吧:

svn commit/ci -m 'message' 

導(dǎo)出代碼

你想把你的代碼導(dǎo)出,不包含svn版本信息,那么你可以:

svn export svn://xxx.com/repo/branches/test folder(本地目錄) 

Git篇

安裝之后第一步

安裝 Git 之后,你要做的第一件事情就是去配置你的名字和郵箱,因為每一次提交都需要這些信息:

git config --global user.name "bukas" git config --global user.email "[email protected]" 

獲取Git配置信息,執(zhí)行以下命令:

git config --list 

創(chuàng)建版本庫

什么是版本庫呢?版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。

mkdir testgit && cd testgit git init 

瞬間Git就把倉庫建好了,細(xì)心的讀者可以發(fā)現(xiàn)當(dāng)前目錄下多了一個.git的目錄,默認(rèn)是隱藏的,用ls -ah命令就可以看見。

git-init

把文件添加到版本庫

touch readme.md git add readme.md 

然后用命令git commit告訴Git把文件提交到倉庫:

git commit -m "wrote a readme file" 

簡單解釋一下git commit命令,-m后面輸入的是本次提交的說明,可以輸入任意內(nèi)容,當(dāng)然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄。

一次可以add多個不同的文件,以空格分隔:

git add a.txt b.txt c.txt 

倉庫狀態(tài)

git status 

git status命令可以讓我們時刻掌握倉庫當(dāng)前的狀態(tài)。

但如果能看看具體修改了什么內(nèi)容就更好了:

git diff readme.md 

版本回退

在實際工作中,我們腦子里怎么可能記得一個幾千行的文件每次都改了什么內(nèi)容,不然要版本控制系統(tǒng)干什么。版本控制系統(tǒng)肯定有某個命令可以告訴我們歷史記錄,在Git中,我們用git log命令查看:

git log 

git-log

git log命令顯示從最近到最遠(yuǎn)的提交日志。如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數(shù):

git log --pretty=oneline 

git-log-pretty

需要友情提示的是,你看到的一大串類似2e70fd...376315的是commit id(版本號)

在 Git中,用HEAD表示當(dāng)前版本,也就是最新的提交commit id,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當(dāng)然往上100個版本寫100個^比較容易數(shù)不過來,所以寫成HEAD~100。

現(xiàn)在我們要把當(dāng)前版本回退到上一個版本,就可以使用git reset命令:

git reset --hard HEAD^ 

然我們用git log再看看現(xiàn)在版本庫的狀態(tài),最新的那個版本已經(jīng)看不到了!好比你從21世紀(jì)坐時光穿梭機(jī)來到了19世紀(jì),想再回去已經(jīng)回不去了,腫么辦?

git-reset

辦法其實還是有的,只要上面的命令行窗口還沒有被關(guān)掉,你就可以順著往上找啊找啊,假設(shè)找到那個commit id是2e70fdf...,于是就可以指定回到未來的某個版本:

git reset --hard 2e70fdf 

版本號沒必要寫全,前幾位就可以了,Git會自動去找。當(dāng)然也不能只寫前一兩位,因為Git可能會找到多個版本號,就無法確定是哪一個了。

現(xiàn)在,你回退到了某個版本,關(guān)掉了電腦,第二天早上就后悔了,想恢復(fù)到新版本怎么辦?找不到新版本的commit id怎么辦?

Git提供了一個命令git reflog用來記錄你的每一次命令:

git reflog 

git-reflog

終于舒了口氣,于是你看到的commit id是2e70fdf,現(xiàn)在,你又可以乘坐時光機(jī)回到未來了。

工作區(qū)和暫存區(qū)

Git和其他版本控制系統(tǒng)如SVN的一個不同之處就是有暫存區(qū)的概念。

工作區(qū)就是你在電腦里能看到的目錄,比如我的testgit文件夾就是一個工作區(qū)。

工作區(qū)有一個隱藏目錄.git,這個不算工作區(qū),而是Git的版本庫。

Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動創(chuàng)建的第一個分支master,以及指向master的一個指針叫HEAD。

前面講了我們把文件往 Git 版本庫里添加的時候,是分兩步執(zhí)行的:

第一步是用git add把文件添加進(jìn)去,實際上就是把文件修改添加到暫存區(qū);

第二步是用git commit提交更改,實際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支。

因為我們創(chuàng)建Git版本庫時,Git自動為我們創(chuàng)建了唯一一個master分支,所以現(xiàn)在git commit就是往master分支上提交更改。

你可以簡單理解為,git add命令實際上就是把要提交的所有修改放到暫存區(qū)(Stage),然后執(zhí)行g(shù)it commit就可以一次性把暫存區(qū)的所有修改提交到分支。

一旦提交后,如果你又沒有對工作區(qū)做任何修改,那么工作區(qū)就是“干凈”的。

修改與撤銷

用git diff HEAD -- readme.md命令可以查看工作區(qū)和版本庫里面最新版本的區(qū)別。

git checkout -- file可以丟棄工作區(qū)的修改:

git checkout -- readme.md 

命令git checkout -- readme.md意思就是,把readme.md文件在工作區(qū)的修改全部撤銷,即讓這個文件回到最近一次git commit或git add時的狀態(tài)。

當(dāng)然也可以用git reset命令。

刪除文件

一般情況下,你通常直接在文件管理器中把沒用的文件刪了,或者用rm命令刪了:

rm readme.md 

這個時候,Git 知道你刪除了文件,因此,工作區(qū)和版本庫就不一致了,git status命令會立刻告訴你哪些文件被刪除了。

現(xiàn)在你有兩個選擇,一是確實要從版本庫中刪除該文件,那就用命令git rm刪掉,并且git commit:

git rm readme.md git commit -m "remove readme.md" 

現(xiàn)在,文件就從版本庫中被刪除了。

另一種情況是刪錯了,因為版本庫里還有呢,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本:

git checkout -- readme.md 

生成SSH key

創(chuàng)建 SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經(jīng)有了,可直接跳到下一步。如果沒有,打開 Shell(Windows下打開Git Bash),創(chuàng)建SSH Key:

ssh-keygen -t rsa -C "[email protected]" 

你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認(rèn)值即可。

如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

然后登錄GitHub(或者其它Git代碼托管平臺),打開Account settings,SSH Keys頁面,點Add SSH Key,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容。

為什么GitHub需要SSH Key呢?因為GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協(xié)議,所以GitHub只要知道了你的公鑰,就可以確認(rèn)只有你自己才能推送。

當(dāng)然,GitHub允許你添加多個Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家里提交,只要把每臺電腦的Key都添加到GitHub,就可以在每臺電腦上往GitHub推送了。

遠(yuǎn)程服務(wù)器

Git 最強(qiáng)大的功能之一是可以有一個以上的遠(yuǎn)程服務(wù)器(另一個事實,你總是可以運(yùn)行一個本地倉庫)。你不一定總是需要寫訪問權(quán)限,你可以從多個服務(wù)器中讀取(用于合并),然后寫到另一個服務(wù)器中。添加一個遠(yuǎn)程服務(wù)器很簡單:

git remote add origin(別名,根據(jù)愛好命名) [email protected]:bukas/bukas.git 

如果你想查看遠(yuǎn)程服務(wù)器的相關(guān)信息,你可以這樣做:

# shows URLs of each remote server git remote -v   # gives more details about origin git remote show origin(別名) 

下一步,就可以把本地庫的所有內(nèi)容推送到遠(yuǎn)程庫上:

git push -u origin master 

把本地庫的內(nèi)容推送到遠(yuǎn)程,用git push命令,實際上是把當(dāng)前分支master推送到遠(yuǎn)程。

由于遠(yuǎn)程庫是空的,我們第一次推送master分支時,加上了-u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時就可以簡化命令。

從現(xiàn)在起,只要本地作了提交,就可以通過命令把本地master分支的最新修改推送至GitHub:

git push origin master 

SSH警告

當(dāng)你第一次使用Git的clone或者push命令連接GitHub時,會得到一個警告:

The authenticity of host ‘github.com (xx.xx.xx.xx)’ can’t be established.

RSA key fingerprint is xx.xx.xx.xx.xx.

Are you sure you want to continue connecting (yes/no)?

這是因為Git使用SSH連接,而SSH連接在第一次驗證GitHub服務(wù)器的Key時,需要你確認(rèn) GitHub的Key的指紋信息是否真的來自GitHub的服務(wù)器,輸入yes回車即可。

從遠(yuǎn)程庫克隆

當(dāng)已經(jīng)有一個遠(yuǎn)程庫的時候,我們可以用命令git clone克隆一個本地庫:

git clone [email protected]:test/testgit.git 

你也許還注意到,GitHub給出的地址不止一個,還可以用https://github.com/test/testgit.git這樣的地址。實際上Git支持多種協(xié)議,默認(rèn)的git://使用ssh,但也可以使用https等其他協(xié)議。使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內(nèi)部就無法使用ssh協(xié)議而只能用https。

創(chuàng)建與合并分支

首先我們創(chuàng)建dev分支,然后切換到dev分支:

git checkout -b dev 

git checkout命令加上-b參數(shù)表示創(chuàng)建并切換,相當(dāng)于以下兩條命令:

git branch dev git checkout dev 

然后用git branch命令查看當(dāng)前分支:

git branch 

我們在dev分支上進(jìn)行添加修改操作,然后我們把dev分支的工作成果合并到master分支上:

git checkout master git merge dev 

git merge命令用于合并指定分支到當(dāng)前分支。

注意到git merge的信息里面可能有Fast-forward字樣,Git告訴我們,這次合并是“快進(jìn)模式”,也就是直接把master指向dev的當(dāng)前提交,所以合并速度非?臁

當(dāng)然也不是每次合并都能Fast-forward。

合并完成后,就可以放心地刪除dev分支了:

git branch -d dev 

如果要丟棄一個沒有被合并過的分支,可以通過git branch -D <branch>強(qiáng)行刪除。

在本地創(chuàng)建和遠(yuǎn)程分支對應(yīng)的分支,使用git checkout -b branch-name origin/branch-name,本地和遠(yuǎn)程分支的名稱最好一致;

建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用git branch --set-upstream branch-name origin/branch-name;

從遠(yuǎn)程抓取分支,使用git pull,如果有沖突,要先處理沖突。

解決沖突

人生不如意之事十之八九,合并分支往往也不是一帆風(fēng)順的。

有時候我們進(jìn)行合并的時候,會提示有沖突出現(xiàn)CONFLICT (content),必須手動解決沖突后再提交。git status也可以告訴我們沖突的文件。

打開沖突文件我們會看到Git用<<<<<<<,=======,>>>>>>>標(biāo)記出不同分支的內(nèi)容,我們修改后提交:

git add readme.md git commit -m "conflict fixed" 

用帶參數(shù)的git log也可以看到分支的合并情況:

git log --graph --pretty=oneline --abbrev-commit 

分支管理策略

通常,合并分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支后,會丟掉分支信息。

如果要強(qiáng)制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。

下面我們實戰(zhàn)一下--no-ff方式的git merge:

首先,仍然創(chuàng)建并切換dev分支:

git checkout -b dev 

修改readme.md文件,并提交一個新的commit:

git add readme.md git commit -m "add merge" 

現(xiàn)在,我們切換回master:

git checkout master 

準(zhǔn)備合并dev分支,請注意--no-ff參數(shù),表示禁用Fast forward:

git merge --no-ff -m "merge with no-ff" dev 

Bug分支

軟件開發(fā)中,bug就像家常便飯一樣。有了bug就需要修復(fù),在Git中,由于分支是如此的強(qiáng)大,所以,每個bug都可以通過一個新的臨時分支來修復(fù),修復(fù)后,合并分支,然后將臨時分支刪除。

當(dāng)你接到一個修復(fù)一個代號101的bug的任務(wù)時,很自然地,你想創(chuàng)建一個分支issue-101來修復(fù)它,但是,等等,當(dāng)前正在dev上進(jìn)行的工作還沒有提交。

并不是你不想提交,而是工作只進(jìn)行到一半,還沒法提交,預(yù)計完成還需1天時間。但是,必須在兩個小時內(nèi)修復(fù)該bug,怎么辦?

幸好,Git還提供了一個stash功能,可以把當(dāng)前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作:

git stash 

現(xiàn)在,用git status查看工作區(qū),就是干凈的(除非有沒有被 Git 管理的文件),因此可以放心地創(chuàng)建分支來修復(fù)bug。

首先確定要在哪個分支上修復(fù)bug,假定需要在master分支上修復(fù),就從master創(chuàng)建臨時分支:

git checkout master git checkout -b issue-101 

現(xiàn)在修復(fù)bug,然后提交:

git add readme.md git commit -m "fix bug 101" 

修復(fù)完成后,切換到master分支,并完成合并,最后刪除issue-101分支:

git checkout master git merge --no-ff -m "merged bug fix 101" issue-101 

太棒了,原計劃兩個小時的bug修復(fù)只花了5分鐘!現(xiàn)在,是時候接著回到dev分支干活了!

git checkout dev git status 

工作區(qū)是干凈的,剛才的工作現(xiàn)場存到哪去了?用git stash list命令看看:

git stash list 

工作現(xiàn)場還在,Git把stash內(nèi)容存在某個地方了,但是需要恢復(fù)一下,有兩個辦法:

一是用git stash apply恢復(fù),但是恢復(fù)后,stash內(nèi)容并不刪除,你需要用git stash drop來刪除;

另一種方式是用git stash pop,恢復(fù)的同時把stash內(nèi)容也刪了:

git stash pop 

再用git stash list查看,就看不到任何stash內(nèi)容了。

你可以多次stash,恢復(fù)的時候,先用git stash list查看,然后恢復(fù)指定的stash,用命令

git stash apply [email protected]{0} 

標(biāo)簽管理

發(fā)布一個版本時,我們通常先在版本庫中打一個標(biāo)簽,這樣,就唯一確定了打標(biāo)簽時刻的版本。將來無論什么時候,取某個標(biāo)簽的版本,就是把那個打標(biāo)簽的時刻的歷史版本取出來。所以,標(biāo)簽也是版本庫的一個快照。

命令git tag <tagname>用于新建一個標(biāo)簽,默認(rèn)為HEAD,也可以指定一個commit id。

git tag -a <tagname> -m "blablabla..."可以指定標(biāo)簽信息。

還可以通過-s用私鑰簽名一個標(biāo)簽:

git tag -s v0.5 -m "signed version 0.2 released" fec145a 

git tag可以查看所有標(biāo)簽。

用命令git show <tagname>可以查看某個標(biāo)簽的詳細(xì)信息。

如果標(biāo)簽打錯了,也可以刪除:

git tag -d v0.1 

因為創(chuàng)建的標(biāo)簽都只存儲在本地,不會自動推送到遠(yuǎn)程。所以,打錯的標(biāo)簽可以在本地安全刪除。

如果要推送某個標(biāo)簽到遠(yuǎn)程,使用命令git push origin <tagname>:

git push origin v1.0 

或者,一次性推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽:

git push origin --tags 

如果標(biāo)簽已經(jīng)推送到遠(yuǎn)程,要刪除遠(yuǎn)程標(biāo)簽就麻煩一點,先從本地刪除:

git tag -d v0.9 

然后,從遠(yuǎn)程刪除。刪除命令也是push,但是格式如下:

git push origin :refs/tags/v0.9 

忽略特殊文件

在安裝Git一節(jié)中,我們已經(jīng)配置了user.name和user.email,實際上,Git還有很多可配置項。

比如,讓Git顯示顏色,會讓命令輸出看起來更醒目:

git config --global color.ui true 

有些時候,你必須把某些文件放到Git工作目錄中,但又不能提交它們,比如保存了數(shù)據(jù)庫密碼的配置文件啦,等等,每次git status都會顯示Untracked files…,有強(qiáng)迫癥的童鞋心里肯定不爽。

好在Git考慮到了大家的感受,這個問題解決起來也很簡單,在 Git工作區(qū)的根目錄下創(chuàng)建一個特殊的.gitignore文件,然后把要忽略的文件名填進(jìn)去,Git就會自動忽略這些文件。

不需要從頭寫.gitignore文件,GitHub已經(jīng)為我們準(zhǔn)備了各種配置文件,只需要組合一下就可以使用了。所有配置文件可以直接在線瀏覽:https://github.com/github/gitignore

當(dāng)然也可以配置全局忽略的文件,這樣就不用每個項目都加gitignore了:

git config --global core.excludesfile '~/.gitignore' 

配置別名

有沒有經(jīng)常敲錯命令?比如git status?status這個單詞真心不好記。

如果敲git st就表示git status那就簡單多了,當(dāng)然這種偷懶的辦法我們是極力贊成的。

我們只需要敲一行命令,告訴Git,以后st就表示status:

git config --global alias.st status 

當(dāng)然還有別的命令可以簡寫:

git config --global alias.co checkout git config --global alias.ci commit git config --global alias.br branch 

--global參數(shù)是全局參數(shù),也就是這些命令在這臺電腦的所有Git倉庫下都有用。

在撤銷修改一節(jié)中,我們知道,命令git reset HEAD file可以把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū)。既然是一個unstage操作,就可以配置一個unstage別名:

git config --global alias.unstage 'reset HEAD' 

配置一個git last,讓其顯示最后一次提交信息:

git config --global alias.last 'log -1' 

甚至還有人把lg配置成了:

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 

配置文件

配置Git的時候,加上–global是針對當(dāng)前用戶起作用的,如果不加,那只針對當(dāng)前的倉庫起作用。

配置文件放哪了?每個倉庫的Git配置文件都放在.git/config文件中。

而當(dāng)前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中。

原文:http://w3cboy.com/post/2015/09/those-common-svn-and-git-commands/

標(biāo)簽: isp 安全 代碼 服務(wù)器 權(quán)限 數(shù)據(jù)庫

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:如何做好架構(gòu)之識別問題

下一篇:認(rèn)識概念是理解架構(gòu)的基礎(chǔ)