git入門 建立版本庫, 版本管理 分支 標籤

參考: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000html

 

GIT最流行的分佈式版本控制系統git

分佈式版本控制系統與集中式版本控制系統有何不一樣呢?首先,分佈式版本控制系統根本沒有「中央服務器」,每一個人的電腦上都是一個完整的版本庫,這樣,你工做的時候,就不須要聯網了,由於版本庫就在你本身的電腦上。既然每一個人電腦上都有一個完整的版本庫,那多我的如何協做呢?比方說你在本身電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時,大家倆之間只需把各自的修改推送給對方,就能夠互相看到對方的修改了。github

 

第一步: 安裝

我用的mac, 以前裝了homebrew, 安裝git很簡單, 緩存

brew install git安全

 

第二步: 建立版本庫(倉庫)

選擇一個合適的地方,建立一個空目錄服務器

$ mkdir ggg
$ cd ggg
$ pwd
/Users/Newly/Desktop/ggg

經過git init命令把這個目錄變成Git能夠管理的倉庫:app

$ git init
Initialized empty Git repository in /Users/Newly/Desktop/ggg/.git/

把你要管理的文件 放入ggg文件夾分佈式

第三步: 開始你的表演

1. 設置郵箱 名字

git config --global user.name'yourname'ide

git config --global user.email 'xxx@xx.com'idea

 

2. 添加文件到倉庫緩存區

—————— 工做區 -----------------

git add 文件名 可反覆屢次使用,添加多個文件

git add . 添加全部文件

git status 查看狀態

On branch master

No commits yet

Changes to be committed:
(use "git rm --cached <file>..." to unstage)

new file:   gitbull/.idea/dictionaries/Newly.xml
new file:   gitbull/.idea/encodings.xml
new file:   gitbull/.idea/gitbull.iml
...

3. 提交到倉庫

—————— 緩存區 ----------------

 

git commit -m '詳細的介紹'

 

—————— 版本庫 ---------------

再次查看

git status

On branch master
nothing to commit, working tree clean

 

4. 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:   gitbull/.idea/workspace.xml
modified:   gitbull/templates/index.html

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

 

想要看修改後的文件 和 以前提交的文件有何不一樣

在add添加以前執行查不一樣

git diff

 

git log 當前版本以前的提交記錄

git reflog 查看所有的

 

git checkout — file;撤銷對工做區修改;這個命令是以最新的存儲時間節點(add和commit)爲參照,覆蓋工做區對應文件file;這個命令改變的是工做區

git checkout 2c1170e

出如今 「Changes not staged for commit」 這行下面,說明已跟蹤文件的內容發生了變化,但尚未放到暫存區。要暫存此次更新,須要運行 git add 命令

git reset HEAD — file;清空add命令向暫存區提交的關於file文件的修改(Ustage);這個命令僅改變暫存區,並不改變工做區,這意味着在無任何其餘操做的狀況下,工做區中的實際文件同該命令運行以前無任何改變

 

快照

寫到一半時候不想寫了, 能夠保存工做區快照

git stash

而後恢復到最新提交的狀態

想接着寫了 就恢復那個快照

先查看快照列表

git stash list

恢復以前寫到一半的狀態並刪除快照

git stash pop

其餘快照用法:

刪除快照

git stash drop 7a8a720

恢復快照

git stash drop 7a8a720

 

分支

查看分支

git branch

建立 git branch dev (開發的代碼 未上線的)

git branch dev

切換並建立分支

git checkout -b bug

刪除分支

git branch -d name

切換分支

git checkout master

分支合併

須要合併到哪兒 就到哪一個分支

git checkout master    
git merge bug

 

建立標籤

在Git中打標籤很是簡單,首先,切換到須要打標籤的分支上:

$ git branch
* dev
master
$ git checkout master
Switched to branch 'master'

而後,敲命令git tag <name>就能夠打一個新標籤:

$ git tag v1.0

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

$ git tag
v1.0

默認標籤是打在最新提交的commit上的。有時候,若是忘了打標籤,好比,如今已是週五了,但應該在週一打的標籤沒有打,怎麼辦?

方法是找到歷史提交的commit id,而後打上就能夠了:

$ git log --pretty=oneline --abbrev-commit
12a631b (HEAD -> master, tag: v1.0, origin/master) merged bug fix 101
4c805e2 fix bug 101
e1e9c68 merge with no-ff
f52c633 add merge
cf810e4 conflict fixed
5dc6824 & simple
14096d0 AND simple
b17d20e branch test
d46f35e remove test.txt
b84166e add test.txt
519219b git tracks changes
e43a48b understand how stage works
1094adb append GPL
e475afc add distributed
eaadf4e wrote a readme file

比方說要對add merge此次提交打標籤,它對應的commit id是f52c633,敲入命令:

$ git tag v0.9 f52c633

再用命令git tag查看標籤:

$ git tag
v0.9
v1.0

注意,標籤不是按時間順序列出,而是按字母排序的。能夠用git show <tagname>查看標籤信息:

$ git show v0.9
commit f52c63349bc3c1593499807e5c8e972b82c8f286 (tag: v0.9)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:56:54 2018 +0800

  add merge

diff --git a/readme.txt b/readme.txt
...

能夠看到,v0.9確實打在add merge此次提交上。

還能夠建立帶有說明的標籤,用-a指定標籤名,-m指定說明文字:

$ git tag -a v0.1 -m "version 0.1 released" 1094adb

用命令git show <tagname>能夠看到說明文字:

$ git show v0.1
tag v0.1
Tagger: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 22:48:43 2018 +0800

version 0.1 released

commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (tag: v0.1)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:06:15 2018 +0800

    append GPL

diff --git a/readme.txt b/readme.txt
...

注意:標籤老是和某個commit掛鉤。若是這個commit既出如今master分支,又出如今dev分支,那麼在這兩個分支上均可以看到這個標籤。

小結

  • 命令git tag <tagname>用於新建一個標籤,默認爲HEAD,也能夠指定一個commit id;

  • 命令git tag -a <tagname> -m "blablabla..."能夠指定標籤信息;

  • 命令git tag能夠查看全部標籤。

 

操做標籤

若是標籤打錯了,也能夠刪除:

$ git tag -d v0.1
Deleted tag 'v0.1' (was f15b0dd)

由於建立的標籤都只存儲在本地,不會自動推送到遠程。因此,打錯的標籤能夠在本地安全刪除。

若是要推送某個標籤到遠程,使用命令git push origin <tagname>

$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To github.com:michaelliao/learngit.git
 * [new tag]         v1.0 -> v1.0

或者,一次性推送所有還沒有推送到遠程的本地標籤:

$ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0)
To github.com:michaelliao/learngit.git
 * [new tag]         v0.9 -> v0.9

若是標籤已經推送到遠程,要刪除遠程標籤就麻煩一點,先從本地刪除:

$ git tag -d v0.9
Deleted tag 'v0.9' (was f52c633)

而後,從遠程刪除。刪除命令也是push,可是格式以下:

$ git push origin :refs/tags/v0.9
To github.com:michaelliao/learngit.git
 - [deleted]         v0.9

要看看是否真的從遠程庫刪除了標籤,能夠登錄GitHub查看。

小結

  • 命令git push origin <tagname>能夠推送一個本地標籤;

  • 命令git push origin --tags能夠推送所有未推送過的本地標籤;

  • 命令git tag -d <tagname>能夠刪除一個本地標籤;

  • 命令git push origin :refs/tags/<tagname>能夠刪除一個遠程標籤。

經常使用命令

  • git init 初始化git倉庫

  • git add file或者是. 將工做區的內容提交到緩存區

  • git commit -m "信息" 將緩存區的內容提交到版本庫

  • git status 查看git的狀態

  • git log 獲取當前版本以前的提交記錄

  • git reflog 獲取全部的提交記錄

  • git reset --hard md5 回退版本庫

  • git reset HEAD file 將緩存區的文件還原到工做區

  • git checkout file 將工做區的文件回退到上次提交的地方

  • git stash 建立一個快照

  • git stash list 查看全部的快照

  • git stash pop 提取快照的內容,並刪除快照 = git stash apply +git stash drop

  • git stash drop 刪除快照

  • git stash apply 提取快照的內容

  • git branch 查看分支信息

  • git branch -d name 刪除分支

  • git checkout -b name 建立分支並切換分支

  • git checkout name 切換分支

  • git merge name 在合併到的分支上執行

相關文章
相關標籤/搜索