Git-學習筆記(經常使用命令集合)

 這裏引用一下百度百科裏Git的內容:git

Git --- The stupid content tracker, 傻瓜內容跟蹤器。Linus Torvalds 是這樣給咱們介紹 Git 的。
Git 是用於 Linux內核開發的版本控制工具。與經常使用的版本控制工具 CVS, Subversion 等不一樣,它採用了分佈式版本庫的方式,沒必要服務器端軟件支持(wingeddevil注:這得分是用什麼樣的服務端,使用http協議或者git協議等不太同樣。而且在push和pull的時候和服務器端仍是有交互的。),使源代碼的發佈和交流極其方便。 Git 的速度很快,這對於諸如 Linux kernel 這樣的大項目來講天然很重要。 Git 最爲出色的是它的合併跟蹤(merge tracing)能力。

 

怎樣安裝Git這裏不做介紹,請自行百度,謝謝。算法

 

一、初見Git服務器

二、實時查看修改點app

三、版本回退分佈式

四、版本修改工具

4.一、管理修改測試

4.二、撤消修改網站

4.三、刪除文件url

五、分支管理spa

5.一、建立與合併

5.二、合併衝突

5.三、分支管理技巧

5.四、臨時分支

5.五、遠程分支

六、Git標籤

6.一、建立標籤

6.2、標籤管理

七、自定義Git

7.一、忽略特殊文件/文件夾

7.二、建立別名

八、Git管理軟件

 

 

一、初見Git

如下例子在終端操做,咱們先建立一個名爲「TestGit」的文件夾:

$ mkdir TestGit

 

進入「TestGit」文件夾並使用git init命令把這個目錄變成Git能夠管理的倉庫:

$ cd TestGit/
$ git init

你會看見「Initialized empty Git repository in /Users/baijiawei/Desktop/TestGit/.git/」,提示建立的是一個空的倉庫。

 

在當前目錄下,建立文件「readme.txt」,內容爲"one edit",以下圖:

 

另外,在終端使用ls命令,能夠查看當前目錄下的全部文件:

$ ls
readme.txt

 

使用pwd命令能夠看見當前所在的目錄結構:

$ pwd
/Users/這個不能讓大家知道/Desktop/TestGit

 

迴歸正題,使用命令git add命令把文件添加到倉庫:

$ git add readme.txt

執行完成後不會有任何提示,說明添加成功。

 

最後使用git commit命令提交到倉庫:

$ git commit -m "first commit"
[master (root-commit) dc09f1d] first commit 1 file changed, 1 insertion(+) create mode 100644 readme.txt

-m後面輸入的爲本次提交的備註,能夠是任何字符,但最好是有意義的。

執行完命令後會告訴你此次提交的結果。

 

 

二、實時查看修改點

咱們修改一下readme.txt的內容,以下圖:

 

咱們可使用git status命令查看倉庫當前的狀態:

$ git status
On branch master

Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: readme.txt

結果告訴咱們,readme.txt被修改過了,但尚未提交修改。

 

使用git diff命令,查看文件具體的修改:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt index 4f1b13a..8794b68 100644 --- a/readme.txt +++ b/readme.txt @@ -1 +1,3 @@ -one edit \ No newline at end of file +one edit + +two edit \ No newline at end of file

diff就是difference,能夠從上面的命令輸出看到,咱們在第三行添加了「two edit」文字。

 

使用add和commit命令把修改提交到Git倉庫:

$ git add readme.txt 
$ git commit -m "two edit" [master 299e07a] two edit 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 .DS_Store

 

 

三、版本管理

咱們可使用git log命令查看提交的記錄:

$ git log
commit 299e07a39e547e1b48f3fc657daa7e6d4ecbf6f4
Author: GarveyCalvin <1147626297@qq.com> Date: Sat Jan 17 17:25:17 2015 +0800 two edit commit dc09f1df94afd30bca6726e9f0d3459e358ac560 Author: GarveyCalvin <1147626297@qq.com> Date: Sat Jan 17 17:11:31 2015 +0800 first commit

從查詢結果咱們能夠看見,我剛剛總共提交了2次到Git倉庫。咱們還能夠看見,commit後面有一串很長的數字,那是每次提交至Git版本庫都會隨機生成的一串ID(哈希算法),用做版本號,後面咱們會使用到。提示:每個版本號都是隨機且是不一樣

 

咱們還能夠把記錄內容顯示壓縮爲一行,在後面添加參數「--pretty=oneline」:

$ git log --pretty=oneline
299e07a39e547e1b48f3fc657daa7e6d4ecbf6f4 two edit
dc09f1df94afd30bca6726e9f0d3459e358ac560 first commit

 

先來回憶一下,最後修改的readme.txt文件內容以下圖所示:

咱們把它回退一個版本,也就是隻有「one edit」內容的readme.txt文件。

 

使用git reset命令進行版本回退:

$ git reset --hard HEAD^
HEAD is now at dc09f1d first commit

在Git中,HEAD表示當前版本,HEAD^表示上一個版本,HEAD^^表示再上一個版本。若是要回退更多的版本,咱們可使用HEAD~n表示。你會看見reset命令後面帶着參數「--hard」,如今先不用管它用來幹什麼的,先用着,在後面會說到。

 

咱們看一下回退後的readme.txt文件內容:

能夠看出來,咱們已經回退了一個版本。

 

如今使用git log命令查看一下:

$ git log
commit dc09f1df94afd30bca6726e9f0d3459e358ac560
Author: GarveyCalvin <1147626297@qq.com> Date: Sat Jan 17 17:11:31 2015 +0800 first commit

從log命令查看的結果中發現,最新的那個版本已經看不到了,那咱們還能回到最新的版本嗎?

 

方法是有的,前面咱們介紹了Git的版本號,咱們就是使用它來進行回到最新的版本:

$ git reset --hard 299e07a39e54
HEAD is now at 299e07a two edit

咱們通常不須要把一整串版本號寫上去,只須要打前面的幾位便可,Git會本身進行查找。但也不要只打前面1-2位,由於這樣有可能找到重複的。

 

咱們再次查看readme.txt文件內容:

 

咱們再使用git log來看一下提交至Git倉庫的記錄:

$ git log
commit 299e07a39e547e1b48f3fc657daa7e6d4ecbf6f4
Author: GarveyCalvin <1147626297@qq.com> Date: Sat Jan 17 17:25:17 2015 +0800 two edit commit dc09f1df94afd30bca6726e9f0d3459e358ac560 Author: GarveyCalvin <1147626297@qq.com> Date: Sat Jan 17 17:11:31 2015 +0800 first commit

 

那麼,若是咱們當初回退了版本以後,並關閉了終端。沒過一下子,你後悔了,須要回到最新的那個版本怎麼辦?幸虧,在Git中是能夠有後悔藥吃的,咱們可使用git reflog命令回到將來:

$ git reflog
299e07a HEAD@{0}: reset: moving to 299e07a39e54 dc09f1d HEAD@{1}: reset: moving to HEAD^ 299e07a HEAD@{2}: commit: two edit dc09f1d HEAD@{3}: commit (initial): first commit

有了版本號ID,你就可使用回到將來了。

 

 

四、版本修改

4.一、管理修改

這裏先說一下,Git有工做區和暫存區。工做區就是咱們肉眼能看到的目錄,暫存區存放的是修改的記錄。咱們前面的git add命令就是把文件添加到暫存區,git commit命令就是提交暫存區的全部修改:

 

好比咱們如今把readme.txt文件稍做修改,添加多一行文字,以下圖所示:

 

使用git add命令把readme.txt文件添加到暫存區:

$ git add readme.txt 

 

咱們再修改readme.txt文件的內容爲:

 

最後使用git commit命令將暫存區提交全部修改:

$ git commit -m "three edit"
[master 5308250] three edit 1 file changed, 3 insertions(+), 1 deletion(-)

 

使用git status命令查看一下Git倉庫的狀態:

$ git status
On branch master
Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a")

提示有文件修改了沒添加至暫存區,爲何呢?咱們剛剛不是把readme.txt文件添加到暫存區了嗎?

咱們先回想一下剛剛添加的步驟:

1.修改readme.txt文件

2.把readme.txt文件添加到暫存區

3.再次修改readme.txt文件

4.提交到Git倉庫

咱們是把第一次修改readme.txt文件時添加到暫存區中,所以暫存區只存放了咱們的第一次修改記錄,而第二次修改後咱們沒及時把readme.txt文件添加到暫存區,所以提交時只會把暫存區記錄的第一次修改提交到Git倉庫。

 

不相信?咱們可使用git diff命令查看本地和最新版本里readme.txt文件的區別:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt index 60f01b0..f469ed7 100644 --- a/readme.txt +++ b/readme.txt @@ -2,4 +2,4 @@ one edit two edit -three \ No newline at end of file +four \ No newline at end of file

可見,第二次修改是沒有被提交到Git倉庫裏的。

 

若是你的當前倉庫狀態沒有任何修改,那麼倉庫狀態應爲:

$ git status
On branch master
nothing to commit, working directory clean

 

 

 

4.二、撤消修改

咱們把readme.txt文件修改成以下內容:

 

 

 

咱們先使用git status查看一下狀態:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

有一句提示是,使用git checkout -- <file>撤消對工做區的修改。

 

好了,我忽然間不想改這個文件了,我須要復原。那麼可使用git checkout -- file撤消對工做區的修改:

$ git checkout -- readme.txt

 

再次打開readme.txt文件查看內容:

果真,readme.txt已經復原了。提示:git checkout -- <file>命令是把文件回到最近一次git commitgit add時的狀態。

 

咱們再次添加一些無用的內容,並把文件添加至暫存區:

 

使用git status命令查看當前的狀態:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage) modified: readme.txt

有一句提示爲,使用git reset HEAD <file>能夠把該文件在暫存區的修改撤消掉。

 

回到正題,剛改的內容我不想提交到Git倉庫,咱們可使用git reset HEAD <file>把暫存區的修改撤消,把該文件的修改所有放回到工做區中:

$ git reset HEAD readme.txt 
Unstaged changes after reset:
M    readme.txt

 

如今再使用git status命令查看當前狀態:

$ git status
On branch master
Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a")

 

4.三、刪除文件

咱們先增長一個「git.txt」文件,而後把它提交上Git倉庫:

$ git add git.txt 
baijiawei-de-mac:TestGit baijiawei$ git commit -m "add git.txt" [master e7a8c02] add git.txt 1 file changed, 5 insertions(+) create mode 100644 git.txt

 

如今,咱們把「git.txt」刪除,刪除後使用git status命令查看一下狀態:

$ git status
On branch master
Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) deleted: git.txt no changes added to commit (use "git add" and/or "git commit -a")

git會告訴你刪除了「git.txt」文件,但還沒提交。

 

狀況一:使用git rm命令刪除「git.txt」命令並提交:

$ git rm git.txt
rm 'git.txt' $ git commit -m "delegate git.txt" [master 8652eea] delegate git.txt 1 file changed, 5 deletions(-) delete mode 100644 git.txt

 

狀況二:刪除錯了文件,想要復原:

$ git checkout -- git.txt
$ ls
git.txt        readme.txt

不少時候咱們修改錯了文件,均可以使用git checkout命令進行復原。

 

 

五、分支管理

5.一、建立與合併

咱們如今新建test分支,並切換至test分支:

$ git branch test
$ git checkout test Switched to branch 'test'

或:

$ git checkout -b test
Switched to a new branch 'test'

使用git checkout命令加上-b參數,表示新建並切換至分支。

 

使用git branch命令查看全部分支:

$ git branch
  master
* test

其中*號後面的就是當前所在分支。

 

這個分支能夠正常使用了,咱們修改一下readme.txt的內容:

而後提交:

$ git add readme.txt 
$ git commit -m "add New Num" [test 6f9e769] add New Num 1 file changed, 3 insertions(+), 1 deletion(-)

 

咱們如今切換到master分支:

$ git checkout master
Switched to branch 'master'

 

再看一下readme.txt文件:

剛剛新增的一行內容已經不見了,由於咱們剛剛提交的是test分支,master分支是沒有提交的。

 

咱們如今把它們合併一下:

$ git merge test
Updating c684781..6f9e769
Fast-forward readme.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)

顯示快速合併,由於不存在衝突,所以直接合並就能夠了,後面會說到發生衝突時的狀況。

 

合併後咱們再看一下readme.txt文件:

內容已經合併完成了。

 

咱們如今能夠把test分支刪除:

$ git branch -d test
Deleted branch test (was 6f9e769).

在git branch命令後面加上-d參數,表示刪除分支。

 

咱們使用git branch命令查看全部分支:

$ git branch
* master

如今就只剩下master這個分支了。

 

 

5.二、合併衝突

每每進行合併時都不會那麼順心,每每會發生衝突。

咱們如今建立branchTest分支:

$ git checkout -b branchTest
Switched to a new branch 'branchTest'

 

修改readme.txt文件:

 

在branchTest分支上提交:

$ git add readme.txt
$ git commit -m "I like here" [branchTest f1dc9cb] I like here 1 file changed, 1 insertion(+), 1 deletion(-)

 

切換至master分支:

$ git checkout master
Switched to branch 'master'

 

修改readme.txt文件:

 

而後在master分支提交:

$ git add readme.txt 
$ git commit -m "I don't like here" [master 87ef579] I don't like here 1 file changed, 1 insertion(+), 1 deletion(-)

 

咱們嘗試一下使用git merge合併分支:

$ git merge branchTest
Auto-merging readme.txt CONFLICT (content): Merge conflict in readme.txt Automatic merge failed; fix conflicts and then commit the result.

果真,Git提示咱們有錯誤發生(衝突)。它本身不能完成合並,咱們須要手動解決衝突。

 

咱們也可使用git status命令查看衝突的文件:

$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit") Unmerged paths: (use "git add <file>..." to mark resolution) both modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a")

 

咱們查看readme.txt文件:

Git用<<<<<<<、=======、>>>>>>>表示不一樣分支的內容。

 

咱們把readme.txt文件內容改爲以下圖所示:

 

提交修改:

$ git add readme.txt 
$ git commit -m "finish merge" [master 1bb3712] finish merge

 

咱們可使用git log命令查看分支的合併狀況:

$ git log --graph
* commit 1bb37128048d172cfe928fff96f68578b7c6f933 |\ Merge: 87ef579 f1dc9cb | | Author: GarveyCalvin <1147626297@qq.com> | | Date: Sun Jan 18 23:28:12 2015 +0800 | | | | finish merge | | | * commit f1dc9cb9e2f387b35fe323b67bf6d49eeae00ea8 | | Author: GarveyCalvin <1147626297@qq.com> | | Date: Sun Jan 18 23:16:09 2015 +0800 | | | | I like here | | * | commit 87ef57980131541f82216b7359ca7beb50c65010 |/ Author: GarveyCalvin <1147626297@qq.com> | Date: Sun Jan 18 23:19:25 2015 +0800 | | I don't like here | * commit 6f9e769ac382f77001b29bd8b2d3b92054390c3e | Author: GarveyCalvin <1147626297@qq.com> | Date: Sun Jan 18 22:55:52 2015 +0800 | 

使用--graph參數能夠查看分支的合併圖。你們是否以爲顯示的內容太多了?大家能夠嘗試在後面添加--pretty=oneline --abbrev-commit參數,添加後再查看,你會發現結果簡潔了許多。

 

如今咱們能夠刪除branchTest分支了:

$ git branch -d branchTest
Deleted branch branchTest (was f1dc9cb).

 

 

5.三、分支管理技巧

在合併分支時,若是Git可以快速合併(Fast-forward),那麼它會直接執行合併(merge)操做。可是,使用它來進行合併(merge),合併(merge)並刪除分支後,會丟失分支信息,這樣不利於咱們往後查看。

所以,咱們通常會禁用快速合併(Fast-forward)功能,Git會在合併(merge)時提交一個新的Commit,這樣,咱們就能從歷史上看到分支的信息。

Git merge命令後加上--no-ff就是禁用快速合併(Fast-forward)功能。

 

咱們先創建並切換到一個新分支test:

$ git checkout -b test
Switched to a new branch 'test'

 

修改並提交readme.txt文件:

$ git add readme.txt 
$ git commit -m "hello world" [test 4a06fc6] hello world 1 file changed, 2 insertions(+)

 

提交完後切換回master分支:

$ git checkout master
Switched to branch 'master'

 

合併test分支:

$ git merge --no-ff -m "merge test" test
Merge made by the 'recursive' strategy. readme.txt | 2 ++ 1 file changed, 2 insertions(+)

--no-ff參數表示禁用快速合併(Fast-forward),由於此次是合併並提交,所以須要加上-m參數備註分支。

 

合併後查看日誌記錄:

$ git log --graph --pretty=oneline --abbrev-commit
* 2b7a3a0 merge test now |\ | * 561f8b3 edit readme |/ 

經過禁用快速合併(Fast-forward),咱們能夠從日誌裏清晰看到曾經作過合併。這是快速合併所作不到的。

 

爲了更清晰地展示二者間的區別,我剛剛又作了一個快速合併(Fast-forward)的操做:

$ git log --graph --pretty=oneline --abbrev-commit
* 6e84f57 error * 2b7a3a0 merge test now |\ | * 561f8b3 edit readme |/ 

從歷史上咱們能夠看到,若是是直接使用快速合併(Fast-forward),咱們在歷史上就只能看到分支提交的Commit,但並不知道是從test分支上合併的; 但若是使用--no-ff參數禁用快速合併(Fast-forward),那麼咱們就能從歷史上清晰看到是與哪一個分支合併。

 

 

5.四、臨時分支

有時候,咱們想要建立一個臨時分支,用來修復一些緊急問題或者是突如其來的任務變動,這些誰也說不許。

 

在你工做沒完成的時候,忽然測試人員走過來跟你說,有一個很緊急的BUG須要修復。這時候你不得不拋下目前的工做去完成他指派給你的BUG,可是,你手頭上還有工做沒完成,只完成了一部分:

$ git status
On branch master
Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a")

 

那麼,這個時候咱們可使用git stash命令,把當前工做區的內容存儲起來,往後繼續工做的時候能夠把它恢復:

$ git stash
Saved working directory and index state WIP on master: 6e84f57 error
HEAD is now at 6e84f57 error $ git status On branch master nothing to commit, working directory clean

 

使用git status驗證工做區是不是乾淨的:

$ git status
On branch master
nothing to commit, working directory clean

從結果看出工做區是乾淨的。

 

好比如今咱們要修復一個BUG,它的ID爲4293-1,咱們先建立並切換到新分支:

$ git checkout -b bug-4293-1
Switched to a new branch 'bug-4293-1'

 

假設咱們已經完成了BUG修復,提交到Git:

$ git add readme.txt 
$ git commit -m "fix bug" [bug-4293-1 d82ca8f] fix bug 1 file changed, 1 insertion(+), 1 deletion(-)

 

切換到master分支,合併bug-4293-1分支,最後刪除bug-4293-1分支:

$ git checkout master
Switched to branch 'master' $ git merge --no-ff -m "merge fix bug" bug-4293-1 Merge made by the 'recursive' strategy. readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) $ git branch -D bug-4293-1 Deleted branch bug-4293-1 (was d82ca8f).

 

那麼該回到以前的工做區上工做了,咱們可使用git stash list查看存儲的工做區列表:

$ git stash list
stash@{0}: WIP on master: 6e84f57 error

 

使用git stash apply恢復:

$ git stash apply
Auto-merging readme.txt CONFLICT (content): Merge conflict in readme.txt

如今,工做區的文件已經所有恢復了。

 

最後把存儲的工做區刪除掉:

$ git stash drop stash@{0}
Dropped stash@{0} (783bdbe7bc4cfff89709dd273fd7b469a9041277)

如今已經把存儲的工做區給刪除了。如今恢復和刪除是分兩步的操做,咱們還能夠把它們合併爲一步,也就是恢復而且刪除,咱們可使用git stash pop命令。

 

如今使用git stash list命令已經查看不到有存儲的工做區了:

$ git stash list

 

5.五、遠程分支

這裏假定你的倉庫已經連接上了遠程倉庫

如何把本地分支推送到遠程分支?好比現已有分支dev,咱們須要把 dev 推送到遠程分支

$ git push origin dev

有時候遠程分支已存在與本地分支相同名稱的分支,可是你又想把本地的分支覆蓋遠程相同名字的分支,這時就要強制推送了

git push -f origin dev

注意:此舉影響重大,在多人協做的時候必定要注意,很容易坑了別人又坑了本身,因此儘可能避免強制推送吧

那麼咱們想要刪除一個遠程分支呢?好比咱們要刪除遠程的dev分支

$ git push origin :dev

 

 

六、Git標籤

6.一、建立標籤 

使用git tag <name>命令打標籤:

$ git tag v1.0.0

 

使用git tag命令能夠查看全部標籤:

$ git tag
v1.0.0

 

使用git tag show <name>命令能夠查看標籤信息:

$ git show v1.0.0
commit 9e53375e4a84bde213aa2a8d5c77adc251ca1503
Author: GarveyCalvin <1147626297@qq.com> Date: Tue Jan 20 11:16:58 2015 +0800 formal ...

 

若是是已提交但忘記打標籤的狀況下,能夠找到當時提交的ID,而後針對ID打標籤:

$ git log --pretty=oneline 
7d5e44602cd32284782ea401dd8c2481fc12ca94 add tag
9e53375e4a84bde213aa2a8d5c77adc251ca1503 formal
ce809c52cb944e679f099ddf2d07e92469a25d53 merge fix bug
d82ca8f16ee7237bdafede1cc709a2d520137c18 fix bug
6e84f5775b0df132f4a737d7281eb0900d1de878 error
2b7a3a07c991a6a5ed4a28bc863d5211336ad96e merge test now
561f8b385bd03e8294fba643289c105de6ffc3df edit readme
ec1ffe29f87da4304abf964e7629dc671c3a59b1 test
87ef57980131541f82216b7359ca7beb50c65010 I don't like here
6f9e769ac382f77001b29bd8b2d3b92054390c3e add New Num c6847813d853e7e70739a55df487407314b7ee30 three edit new 5308250b75470b5754eca360d43a03c74820d4de three edit 299e07a39e547e1b48f3fc657daa7e6d4ecbf6f4 two edit dc09f1df94afd30bca6726e9f0d3459e358ac560 first commit

 

好比在merge test now提交的那一次打標籤,對應的ID是「2b7a3a07c」:

$ git tag v0.1.0 2b7a3a07c

 

使用git tag看一下當前全部的標籤:

$ git tag
v0.1.0 v1.0.0

能夠看到咱們剛剛新打的標籤v0.1.0。

 

再查詢v0.0.1標籤的信息:

$ git show v0.1.0
commit 2b7a3a07c991a6a5ed4a28bc863d5211336ad96e
Merge: ec1ffe2 561f8b3
Author: GarveyCalvin <1147626297@qq.com> Date: Mon Jan 19 10:21:26 2015 +0800 merge test now

能夠看到,標籤已經打在了merge test now此次提交上。

 

咱們還能夠建立有說明的標籤,用-a表示標籤名稱,-m表示說明文字:

$ git tag -a v2.0.0 -m "formal v2.0.0"

 

查看標籤的信息:

$ git show v2.0.0
tag v2.0.0 Tagger: GarveyCalvin <1147626297@qq.com> Date: Tue Jan 20 11:38:10 2015 +0800 formal v2.0.0 commit d5161f9ba613100455a010a3afc312d32a99b68b Author: GarveyCalvin <1147626297@qq.com> Date: Tue Jan 20 11:37:28 2015 +0800 detail tag ...

能夠看到咱們剛剛寫的說明「formal v2.0.0」。

 

 

6.二、標籤管理

使用git tag -d命令刪除標籤: 

$ git tag -d v1.0.0
Deleted tag 'v1.0.0' (was 9e53375)

 

使用git push origin <tagName>推送至遠程倉庫:

$ git push origin v1.0.0
Total 0 (delta 0), reused 0 (delta 0) To https://git.oschina.net/GarveyCalvin/testProject.git * [new tag] v1.0.0 -> v1.0.0

 

使用git push origin --tags把全部未推送的標籤推送到遠程倉庫:

$ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0) To https://git.oschina.net/GarveyCalvin/testProject.git * [new tag] v0.0.1 -> v0.0.1 * [new tag] v0.1.0 -> v0.1.0

 

若是已經推送到遠程倉庫,如今想要刪除的話,首先從本地移除對應的tag:

$ git tag -d v0.0.1
Deleted tag 'v0.0.1' (was bc2cb64)

 

而後在git puh origin命令後面加上:refs/tags/<tag name>刪除:

$ git push origin :refs/tags/v0.0.1
To https://git.oschina.net/GarveyCalvin/testProject.git
 - [deleted]         v0.0.1

除了這種方法,你也能夠自行到遠程倉庫網站把Tag刪除。

 

 

七、自定義Git

7.一、忽略特殊文件/文件夾

在有些時候,咱們的Git項目裏會有一些特殊的文件,多是系統自生成的文件,在你每次提交的時候都會提示你有文件改動了,提示你添加這些文件。這樣是否是很煩人?所以咱們須要忽略這類文件。

 

好比在Mac系統裏,每一個文件夾都會生成一個".DS_Store"的隱藏文件,用來存放文件夾的排序等信息,這些文件也會在查看git status時出現,而且它們出現的次數很是多,使人感受很是煩。你是否有疑惑爲何你看了這篇博文這麼久,都沒有看到過這些提示,那是由於我沒截所有的提示:)。好了,下面就教你們怎樣去忽略它。

 

咱們須要在Git工做區的根目錄下建立.gitignore文件,在這以前咱們先建立一些須要忽略的文件夾:

以上這些文件和文件夾都是須要Git去忽略掉的。

 

咱們先使用git status查看一下狀態:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) .DS_Store bad/ ignore/ other/ nothing added to commit but untracked files present (use "git add" to track)

沒自定義忽略的文件/文件夾前,會把全部改動過的文件/文件夾進行提示。

若是大家沒看見有文件夾顯示,那是由於你的文件夾下沒有文件/文件夾,Git自動會忽略空目錄。解決方法很簡單,只要在文件夾下添加文件就能夠了。

 

如今咱們能夠建立.gitignore文件了,文件內容以下所示:

# remark
*.DS_Store ignore
other
bad

有#號的那一行都是備註,並無實質做用。

*.忽略後綴名爲……的文件

ignore、other、bad爲忽略的文件夾

 

注意,要把.gitignore文件放到版本庫裏:

$ git add .gitignore

 

如今咱們再使用git status查看一下狀態:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: .gitignore

如今就只能查詢到.gitignore文件了,其它須要忽略的文件/文件夾已經被忽略掉。

 

 

7.2 建立別名

咱們能夠像開發那樣,本身定義一個關鍵字類型。

咱們查看狀態時,通常都是使用git status,若是你想簡化成git st,那麼:

$ git config --global alias.st status

--global參數表示全局定義,也就是說定義了以後,在當前電腦下的全部Git倉庫都通用。若是不想定義爲全局,那麼把--global參數去掉便可。

 

之後就能夠直接使用git st命令查看狀態了:

$ git st
On branch master
Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: .gitignore

 

前面咱們想要簡化git log顯示內容時,是否須要輸入一大串字符(git log --pretty=oneline --abbrev-commit)?如今咱們能夠爲它建立別名進行簡化輸入了,而且顯示更增強大:

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"

代碼片斷轉自:http://blog.csdn.net/n289950578/article/details/24465663

 

效果以下:

 

全局的Git配置文件在用戶主目錄(Macintosh HD ▸ Users ▸ 你的用戶名)下的隱藏文件.gitconfig中:

當咱們想要取消別名時,只須要把對應的別名行刪除便可。若是是定義非全局的Git配置文件,那麼它在當前項目的根目錄下的.git隱藏文件夾下的config文件。

 

 

八、Git管理軟件

創建你們使用SourceTree管理Git庫,功能強大,界面友好,使用簡單,這裏就很少做介紹了。

 

 

 

博文做者:GarveyCalvin

博文出處:http://www.cnblogs.com/GarveyCalvin/

本文版權歸做者和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做!

相關文章
相關標籤/搜索