git筆記

Git簡介

Git是一個分佈式版本控制系統。

SVN/CVS是集中式版本控制系統。


分佈式版本控制系統中,每個人的電腦都是一個完整的版本庫,改動的時候只要互相推送改動的部分就可以了。(版本分開存儲)(安全,高效,對網絡沒什麼要求)

而集中式版本控制系統的完整版本庫只有中央服務器纔有,用戶在使用時要先從中央服務器中調取更新的版本,更改後還要提交到中央服務器中,對網絡有一定的要求。(版本只存儲在中央服務器中)(安全性較低,使用不便,要求網絡)

Git安裝

Linux中安裝git

Debain或者是Ubuntu中安裝:

Sudo apt-get install git

Windows中安裝

在git官網中下載安裝

https://git-for-windows.github.io/

git官網下載可能有點卡

https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit


git安裝好後會有git bash、git CMD和git GUI三個項目。


安裝好後,我們還要設置user.name和user.email

$ git config --global user.name "Your Name"

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

因爲Git是分佈式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。


在Windows中的使用git

創建版本庫

Git init創建版本庫

通過git init命令將目錄變爲git版本倉庫。

運行git init命令之後,目錄中會出現.git目錄。這是git的索引管理目錄,最好不要修改。

(版本庫目錄路徑保持英文路徑名)

把文件添加到版本庫

所有的版本控制系統,只能跟蹤文本文件的改動,如txt文件、網頁、程序代碼等。二進制文件如圖片、視頻、word等文件是不能被跟蹤的。

(windows中使用git後千萬不要使用Windows自帶的記事本編輯任何文本文件。原因是Microsoft記事本在保存UTF-8編碼的文件時,在每個文件開頭添加了0xefbbbf(十六進制)的字符,這會產生很多問題,比如,網頁第一行可能會顯示一個“?”,明明正確的程序一編譯就報語法錯誤,等等。可以下載Notepad++代替記事本,把Notepad++的默認編碼設置爲UTF-8 without BOM即可)


Git add 添加版本

使用git add命令把文件添加到倉庫:

Git add readme.txt

Git commit –m ‘xxx’備註改動情況

git commit -m "wrote a readme file"

備註改動情況

$ git add file1.txt

$ git add file2.txt file3.txt

$ git commit -m "add 3 files."


Git status查看狀態:

 wKioL1jzHc-js4FgAABZElvfBNI413.png

Git diff xxx查看未提交的修改

 wKiom1jzHeaRji02AAApgkpK1Aw469.png

$ git diff readme.txt 

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

index 46d49bf..9247db6 100644

--- a/readme.txt

+++ b/readme.txt

@@ -1,2 +1,2 @@

-Git is a version control system.

+Git is a distributed version control system.

 Git is free software.

Git log查看每次改了什麼

 wKiom1jzHf7QVjL1AAA07JnkXsQ961.png

Git log命令顯示從最近到最遠的提交日誌。

如果嫌輸出信息太多,可以加上—-pretty=oneline

 wKioL1jzHhaj39y6AAAeLZDY9ak063.png

$ git log --pretty=oneline

3628164fb26d48395383f8f31179f24e0882e1e0 append GPL

ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed

cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

這一串字符就是git唯一的id。Git的commit id不是1,2,3……遞增的數字,而是一個SHA1計算出來的一個非常大的數字,用十六進制表示。


Git reset命令:回退版本

首先,Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。

$ git reset --hard HEAD^

HEAD is now at ea34578 add distributed

如果我們不想退回這個,只要上面的命令行窗口還沒有被關掉,你就可以順着往上找啊找啊,找到那個commit id,就可以指定回到剛剛被退回的某個版本:

$ git reset --hard 3628164

HEAD is now at 3628164 append GPL

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

  wKioL1jzHjXROPIxAAAXHLoeg5o575.jpgwKioL1jzHj7gW1h3AAAX4KF19FQ413.jpg


Git reflog 記錄每一次命令

 wKiom1jzHlez6Es9AAAhnnCTgos277.png


Git中的工作區和緩存區

工作區:

Git工作區就是我們操作所在的git目錄。

版本庫:

工作區中有一個隱藏目錄.git,這是git的版本庫。

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

 wKiom1jzHmnR9I2TAABBV6R-i7c080.jpg

Git管理的是修改。Git add命令將工作區中修改提交到暫存區中,git commit命令將暫存區中的修改提交到版本庫中。Git完整的過程有兩步。

Git checkout –- file丟棄工作區的修改

Git checkout –readme.txt

將這個文件回到最近一次git commit或git add時的狀態。


Git中刪除文件

方法有二:

(1) 直接在工作區中刪除,然後git commit提交到版本庫。

(2) 用git rm xx,然後git commit 提交到版本庫


Git reset HEAD file將暫存區中的修改撤銷,重新放回工作區。

遠程倉庫

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

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

你需要把郵件地址換成你自己的郵件地址,然後一路回車,使用默認值即可,由於這個Key也不是用於軍事目的,所以也無需設置密碼。

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

第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面:

然後,點“Add SSH Key”,填上Title,在Key文本框裏粘貼id_rsa.pub文件的內容:

 wKioL1jzHoCQHx9_AABN88vuHsQ216.png

點“Add Key”,你就應該看到已經添加的Key:(key輸入進去github會進行檢測,要注意下key是否匹配)

 wKiom1jzHpXRCHP1AAAtNbShlnY677.png

GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。

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

在GitHub上免費託管的Git倉庫,任何人都可以看到(但只有你自己才能改)。所以,不要把敏感信息放進去。

如果你不想讓別人看到Git庫,有兩個辦法,一個是交點保護費,讓GitHub把公開的倉庫變成私有的,這樣別人就看不見了(不可讀更不可寫)。另一個辦法是自己動手,搭一個Git服務器,因爲是你自己的Git服務器,所以別人也是看不見的。

添加遠程庫

先在服務端上創建一個庫create a new repo

然後再本地與遠程做關聯:

Git remote add origin https://github/xiaoqin00/test


在本地需要提交到遠程服務器上的時候就shiyong

Git push命令

Git push –u origin master  (-u只是第一次push的時候使用,第一次使用後,本地和遠程的master分支關聯了起來,以後下載或者是推送的時候就可以直接使用git push和git pull了)





Git remote查看遠程庫

Git remote –v顯示詳細信息

Git remote –rm xxx刪除遠程庫

從遠程庫克隆:

可以通過https協議或者是ssh協議從遠程哭克隆,

命令就是:

Git clone xxxx(鏈接)

創建和合並分支

Git log –-graph查看合併分支圖

Git branch xxx創建分支

Git checkout xxx切換分支

Git checkout –b xxx創建並切換分支

Git checkout –d xxx刪除分支

Git合併分支:

Git merge xxx合併指定分支到當前分支

Git合併分支時,默認是使用fast forward模式,即合併後刪除分支,這會丟失分支信息。

禁用fast forward後,git會在合併時生成一個新的commit,這樣,我們就可以看到完整的版本合併歷史。

Git merge xxx –no-ff  禁用fast forward。

Git分支如果存在衝突,比如兩個分支在某些地方不一樣,那就需要我們手動解決了。

Bug分支

Git還提供了一個stash功能,可以把當前工作現場 ”隱藏起來”,等以後恢復現場後繼續工作。

git stash list 查看隱藏的工作現場列表

git stash恢復:

1. git stash apply恢復,恢復後,stash內容並不刪除,你需要使用命令git stash drop來刪除。

2. 另一種方式是使用git stash pop,恢復的同時把stash內容也刪除了。


分支策略:

首先master主分支應該是非常穩定的,也就是用來發布新版本,一般情況下不允許在上面幹活,幹活一般情況下在新建的dev分支上幹活,幹完後,比如上要發佈,或者說dev分支代碼穩定後可以合併到主分支master上來。

開發一個新feature,最好新建一個分支;

如果要丟棄一個沒有被合併過的分支,可以通過git branch -D <name>強行刪除。


多人合作:

1. 首先,可以試圖用git push origin branch-name推送自己的修改;

2. 如果推送失敗,則因爲遠程分支比你的本地更新,需要先用git pull試圖合併;

3. 如果合併有衝突,則解決衝突,並在本地提交;

4. 沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令git branch --set-upstream branch-name origin/branch-name。

標籤

我們可以對版本庫版本打上標籤,以便以後閱讀。

Git tag xxx創建標籤

Git tag 查看所有標籤

默認標籤是打在最新提交的commit上的,不過也可以通過commit id來補上標籤。

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

6a5819e merged bug fix 101

cc17032 fix bug 101

7825a50 merge with no-ff

6224937 add merge

59bc1cb conflict fixed

400b400 & simple

75a857c AND simple

fec145a branch test

d17efd8 remove test.txt

...

Git show <tagname>查看標籤信息

git tag -a <tagname> -m "blablabla..."可以指定標籤信息;

git tag -s <tagname> -m "blablabla..."可以用PGP簽名標籤;

git tag  -d tagname刪除標籤

git push origin tagname推送標籤

git push origin –-tags 推送所有沒推送的標籤

從遠程刪除標籤:

首先在本地刪除,然後從遠程刪除。

Git tag –d xxx

Git push origin :/refs/tags/xxx  從服務器刪除遠程標籤


自定義git:

Git config –global color.ui true將當前ui策略換爲更醒目的ui策略

忽略特殊文件:

在Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去,Git就會自動忽略這些文件。

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

忽略文件的原則是:

(1) 忽略操作系統自動生成的文件,比如縮略圖等;

(2) 忽略編譯生成的中間文件、可執行文件等,也就是如果一個文件是通過另一個文件自動生成的,那自動生成的文件就沒必要放進版本庫,比如Java編譯產生的.class文件;

(3) 忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。

(4) 假設你在Windows下進行Python開發,Windows會自動在有圖片的目錄下生成隱藏的縮略圖文件,如果有自定義目錄,目錄下就會有Desktop.ini文件,因此你需要忽略Windows自動生成的垃圾文件:

# Windows:

Thumbs.db

ehthumbs.db

Desktop.ini

然後,繼續忽略Python編譯產生的.pyc、.pyo、dist等文件或目錄:

# Python:

*.py[cod]

*.so

*.egg

*.egg-info

dist

build

加上你自己定義的文件,最終得到一個完整的.gitignore文件,內容如下:

# Windows:

Thumbs.db

ehthumbs.db

Desktop.ini


# Python:

*.py[cod]

*.so

*.egg

*.egg-info

dist

build


# My configurations:

db.ini

deploy_key_rsa

最後一步就是把.gitignore也提交到Git,就完成了!當然檢驗.gitignore的標準是git status命令是不是說working directory clean。

使用Windows的童鞋注意了,如果你在資源管理器裏新建一個.gitignore文件,它會非常弱智地提示你必須輸入文件名,但是在文本編輯器裏“保存”或者“另存爲”就可以把文件保存爲.gitignore了。

在git提交的時候一定要注意敏感文件的問題,許多敏感資料泄露和安全事件都是由於git用戶將敏感資料提交到遠程所導致的。

配置別名

git可以用別名來代替原本默認的參數。

git config --global alias.st status

git config –global alias.xx xxx配置別名

刪除別名可以直接在配置文件中刪除。


配置文件:

Git的配置文件在.git/config文件中。

--global參數是針對當前用戶起作用,如果不加,那麼命令只對當前文件夾起作用。


git服務器的搭建:

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000



大致流程:

1、在github上創建項目

2、使用git clone https://github.com/xxxxxxx/xxxxx.git克隆到本地

3、編輯項目

4、git add . (將改動添加到暫存區)

5、git commit -m "提交說明"

6、git push origin master 將本地更改推送到遠程master分支。



參考:

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375233990231ac8cf32ef1b24887a5209f83e01cb94b000

http://www.cnblogs.com/tugenhua0707/p/4050072.html

https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8

http://www.bootcss.com/p/git-guide/



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章