1. 程式人生 > >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這裡不作介紹,請自行百度,謝謝。

8、Git管理軟體

1、初見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後面輸入的為本次提交的備註,可以是任何字元,但最好是有意義的。

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

2、實時檢視修改點

我們修改一下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

3、版本管理

我們可以使用git log命令檢視提交的記錄:

$ git log
commit 299e07a39e547e1b48f3fc657daa7e6d4ecbf6f4
Author: GarveyCalvin <[email protected]>
Date:   Sat Jan 17 17:25:17 2015 +0800

    two edit

commit dc09f1df94afd30bca6726e9f0d3459e358ac560
Author: GarveyCalvin <[email protected]>
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 <[email protected]>
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 <[email protected]>
Date:   Sat Jan 17 17:25:17 2015 +0800

    two edit

commit dc09f1df94afd30bca6726e9f0d3459e358ac560
Author: GarveyCalvin <[email protected]>
Date:   Sat Jan 17 17:11:31 2015 +0800

    first commit

那麼,如果我們當初回退了版本之後,並關閉了終端。沒過一會兒,你後悔了,需要回到最新的那個版本怎麼辦?幸好,在Git中是可以有後悔藥吃的,我們可以使用git reflog命令回到未來:

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

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

4、版本修改

4.1、管理修改

這裡先說一下,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.2、撤消修改

我們把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.3、刪除檔案

我們先增加一個“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、分支管理

5.1、建立與合併

我們現在新建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.2、合併衝突

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

我們現在建立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 <[email protected]>
| | Date:   Sun Jan 18 23:28:12 2015 +0800
| | 
| |     finish merge
| |   
| * commit f1dc9cb9e2f387b35fe323b67bf6d49eeae00ea8
| | Author: GarveyCalvin <[email protected]>
| | Date:   Sun Jan 18 23:16:09 2015 +0800
| | 
| |     I like here
| |   
* | commit 87ef57980131541f82216b7359ca7beb50c65010
|/  Author: GarveyCalvin <[email protected]>
|   Date:   Sun Jan 18 23:19:25 2015 +0800
|   
|       I don't like here
|  
* commit 6f9e769ac382f77001b29bd8b2d3b92054390c3e
| Author: GarveyCalvin <[email protected]>
| 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.3、分支管理技巧

在合併分支時,如果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.4、臨時分支

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

在你工作沒完成的時候,突然測試人員走過來跟你說,有一個很緊急的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
[email protected]{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 [email protected]{0}
Dropped [email protected]{0} (783bdbe7bc4cfff89709dd273fd7b469a9041277)

現在已經把儲存的工作區給刪除了。現在恢復和刪除是分兩步的操作,我們還可以把它們合併為一步,也就是恢復並且刪除,我們可以使用git stash pop命令。

現在使用git stash list命令已經檢視不到有儲存的工作區了:

$ git stash list

6、Git標籤

6.1、建立標籤 

使用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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
Date:   Tue Jan 20 11:38:10 2015 +0800

formal v2.0.0

commit d5161f9ba613100455a010a3afc312d32a99b68b
Author: GarveyCalvin <[email protected]>
Date:   Tue Jan 20 11:37:28 2015 +0800

    detail tag
...

可以看到我們剛剛寫的說明“formal v2.0.0”。

6.2、標籤管理

使用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刪除。

7、自定義Git

7.1、忽略特殊檔案/資料夾

在有些時候,我們的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檔案。

8、Git管理軟體

建立大家使用SourceTree管理Git庫,功能強大,介面友好,使用簡單,這裡就不多作介紹了。

博文作者:GarveyCalvin

本文版權歸作者和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作!

相關推薦

Git學習筆記常用命令集合

 這裡引用一下百度百科裡Git的內容: Git --- The stupid content tracker, 傻瓜內容跟蹤器。Linus Torvalds 是這樣給我們介紹 Git 的。 Git 是用於 Linux核心開發的版本控制工具。與常用的版本控制工具 CVS, Subversion 等不同,

matlab學習筆記常用命令

plot 我們 all 查看 學習 ear tla clear 但是 一.清除命令。   1.clear all;%清除所有變量,通常在matlab的工作區;另外斷點也會被清除掉   2.close all;%關閉所有窗口(除了編輯器窗口、命令窗口、幫助窗口)   3.cl

Linux學習筆記-Linux常用命令-Shell常用技巧

(七)Linux學習筆記-Linux常用命令-Shell常用技巧 Shell常用技巧 < > >>輸入輸出重定向 |(管道) ; && ||(命令連線符) ''(命令替換符) ali

Linux學習筆記-Linux常用命令-網路通訊與關機重啟

(六)Linux學習筆記-Linux常用命令-網路通訊與關機重啟 網路通訊 write(給另外一個使用者發信息) wall(向所有使用者廣播資訊) ping(測試網路連通性) ifconfig(檢視網路設定) 關機重

Linux學習筆記-Linux常用命令-壓縮解壓

(五)Linux學習筆記-Linux常用命令-壓縮解壓 壓縮解壓 gzip(壓縮檔案) gunzip(解壓檔案) tar(打包目錄,常用) zip(壓縮檔案或目錄) unzip(解壓.zip檔案) bzip2(壓縮

Linux學習筆記-Linux常用命令-幫助文件

(四)Linux學習筆記-Linux常用命令-幫助文件 幫助文件 - -help(shell內部的命令幫助) man(系統手冊中的命令幫助) info(超級詳細的命令幫助) whatis(簡短的命令說明) apropos(

Linux學習筆記-Linux常用命令-搜尋命令

(三)Linux學習筆記-Linux常用命令-搜尋命令 搜尋命令 which(顯示命令所在目錄) find(查詢檔案或目錄) locate(在檔案索引中查詢檔案) updatedb(更新檔案索引資料塊) grep(在檔案中

Linux學習筆記-Linux常用命令-許可權管理

(二)Linux學習筆記-Linux常用命令-許可權管理 許可權管理 chmod(更改檔案或目錄許可權) chown(變更所有者) chgrp(變更所屬組) umask(顯示、設定新建檔案或目錄的預設許可權)

Linux學習筆記-Linux常用命令-檔案處理

(一)Linux學習筆記-Linux常用命令-檔案處理 檔案處理 命名規則 ls(list,顯示目錄檔案) cd(change directory,切換目錄) pwd(print working directory,顯示所在目錄)

學習筆記 | sqlmap常用命令

sqlmap 文章 .com pos 鏈接 http 常用 www www. 請移步以下鏈接查看本文章 學習筆記 | sqlmap常用命令 http://www.lofter.com/lpost/1f350fa3_120429c7學習筆記 | sqlmap常用命令

1.mysql學習筆記命令行中的操作

style 登錄 left 多個數據庫 mysql 一個數據庫 weight 準備 ase 2018-07-28 mysql和oracle的不同點: 一個oracle就是一個數據庫。 而一個mysql中可以有多個數據庫 準備:登錄到數據庫 註意:每一個命令都要以分號結束

一.Python的命令行工具 學習筆記Command line tool

als douban ide url list clas useful main.c sele 命令行工具 Scrapy通過scrapy命令行工具進行控制,在此稱為“Scrapy工具”,以區別於子命令,我們稱之為“命令”

[慕課網學習筆記]Linux常用命令

1.基礎命令 cd 切換目錄 ls -l 列出檔案詳細資訊;ls -a  列出當前目錄下所有檔案 touch 建立檔案;mkdir 建立目錄 echo 建立帶有內容的檔案;cat 檢視檔案內容;cp 拷貝; echo "hello world" >mookte

Docker學習筆記--Docker常用命令

1. 檢視docker資訊(version、info) # 檢視docker版本   $docker version   # 顯示docker系統的資訊   $docker info   2. 對image的操作(search、pull、images、rmi、h

Git 從入門到精通常用命令解析

大學的時候就一直在用git了,不過直到現在公司才切git,所以,重新學習記錄下。 一,git add 命令。 $git add <檔名> //將檔案提交到本地倉庫。 $git add . //他會監控工作區的狀

Linux Unix shell 編程指南學習筆記第四部分

fcm 驗證 () only arguments line div 反饋 sed 第十六章 shell腳本介紹 此章節內容較為簡單,跳過。 第十七章 條件測試 test命令 expr命令 test 格式 test condition 或者 [

Swift學習筆記二十二——字典的基本操作

post content 相同 技術分享 eval clas track targe 返回值 (1)計算字典長度 。 (2)推斷字典是否為空 。 (3)查詢字典元素 。 (4)取出字典元素進行拼接 。 (5)字典中插入一個鍵值對 。 (6)字典改動某

Java學習筆記第一次課

stdio.h println 標準 ant 方法參數 ann 控制 大小寫 protect 1.簡單的Java語言模板 package inclass1_1; import java.io.*;//導入包(相當於c語言的#include<stdio.h>)

uCOS-II的學習筆記共九期和例子共六個

操作 第七篇 wip target 恢復 第一篇 ont load -i 源:uCOS-II的學習筆記(共九期)和例子(共六個) 第一篇 :學習UCOS前的準備工作http://blog.sina.com.cn/s/blog_98ee3a930100w0eu.htm

Python學習筆記二十二文檔測試

log debug erro ems www 異常 直接 說明 error 摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143191702