Git的理解(一)

2021-06-26 18:10:38 字數 4444 閱讀 4016

),當然git也是非常深入的,不過對於我而言,我覺著我已經夠用了。

git是分布式版本控制系統( distributed version control system,簡稱 dvcs ),這裡客戶端並不只提取最新版本的檔案快照,而是把**倉庫完整地映象下來。這麼一來,任何一處協同工作用的伺服器發生故障,事後都可以用任何乙個映象出來的本地倉庫恢復。因為每一次的提取操作,實際上都是一次對**倉庫的完整備份。而且相對於之前的svc系統,git不需要聯網就可以在自己的本地工作區里進行編輯。更棒的是,git還有提供分支的功能,你可以在master分支之外建立許多其它的分支,比如:feature分支、bug分支等,最後再將最後的分支合併為master分支,這樣很有利於協作者之間相互之間利用各自的分支來敲寫自己的**,最後將進行合併。可以說以上這兩個優點是git成功的主要原因。

在檔案儲存到git之前,所有資料都要進行內容的校驗和(checksum)計算,並將此結果作為資料的唯一標識和索引。即不可能在你修改了檔案或目錄之後,git一無所知。這項特性作為git的設計哲學,建在整體架構的最底層。所以如果檔案在傳輸時變得不完整,或者磁碟損壞導致檔案資料缺失,git都能立即察覺。

git使用sha-1演算法計算資料的校驗和,通過對檔案的內容或目錄的結構計算出乙個 sha-1 雜湊值,作為指紋字串。該字串由 40 個十六進製制字元(0-9 及 a-f)組成,看起來就像是:24b9da6552252987aa493b52f8696cd6d3b00373。git的工作完全依賴於這類指紋字串,所以你會經常看到這樣的雜湊值。實際上,所有儲存在git資料庫中的東西都是用此雜湊值來作索引的,而不是靠檔名。   

這裡申明一下:所有的版本控制系統,其實只能跟蹤文字檔案的改動,比如txt檔案,網頁,所有的程式**等等,git也不例外。notepad++

代替記事本(因為記事本裡面會在每個檔案前面加了乙個十六進製制的字元),不但功能強大,而且免費!記得把

notepad++

的預設編碼設定為

utf-8 without bom

即可。初始化乙個

git倉庫,使用git init命令。

新增檔案到

git倉庫,分兩步:

第一步,使用命令git add,注意,可反覆多次使用,新增多個檔案;

第二步,使用命令git commit,完成。 

隨時掌握工作區的狀態,使用git status命令。如果git status告訴你有檔案被修改過,可以利用git diff可以檢視修改內容。

head指向的版本就是當前版本,因此,

git允許我們在新舊版本之間穿梭,使用命令git reset --hard commit_id

穿梭前,用git log可以檢視提交歷史,以便確定要回退到哪個版本。

要回到現在,則用git reflog檢視命令歷史,以便確定要回到哪個版本。

下面一幅圖告訴你git的三個狀態:工作區、版本庫(裡面有暫存區):

每次修改,如果不add到暫存區,那就不會加入到commit中。

情形1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。情形2

:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset head file,就回到了場景

1,第二步按場景

1操作。情形3

,不過前提是沒有推送到遠端庫(github)。

要關聯乙個遠端庫,使用命令git remote add origin git@server-name:path/repo-name.git

關聯後,使用命令git push -u origin master第一次推送

master

分支的所有內容;

此後,每次本地提交後,只要有必要,就可以使用命令git push origin master推送最新修改;

當然要從遠端庫轉殖乙個倉庫,首先必須知道倉庫的位址,然後使用git clone命令轉殖。其中

git支援多種協議,包括https,但通過ssh支援的原生git協議速度比較快。

git鼓勵大量使用分支:

當git

無法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。

git log --graph命令可以看到分支合併圖。

git分支十分強大,在團隊開發中應該充分應用。

合併分支時,加上--no-ff引數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。

修復bug

時,我們會通過建立新的

bug分支進行修復,然後合併,最後刪除;

當手頭工作沒有完成時,先把工作現場git stash一下,然後去修復

bug,修復後,再git stash pop,回到工作現場。

開發乙個新

feature

,最好新建乙個分支;

如果要丟棄乙個沒有被合併過的分支,可以通過git branch -d強行刪除。

檢視遠端庫資訊,使用git remote -v

本地新建的分支如果不推送到遠端,對其他人就是不可見的;

從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠端的新提交;

在本地建立和遠端分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠端分支的名稱最好一致;

建立本地分支和遠端分支的關聯,使用git branch --set-upstream branch-name origin/branch-name

命令git tag用於新建乙個標籤,預設為head,也可以指定乙個

commit id

git tag -a -m"blablabla..."可以指定標籤資訊;

git tag -s -m"blablabla..."可以用

pgp簽名標籤;

git tag可以檢視所有標籤。

git push origin可以推送乙個本地標籤;

git push origin --tags可以推送全部未推送過的本地標籤;

git tag -d可以刪除乙個本地標籤;

git push origin :refs/tags/可以刪除乙個遠端標籤。

7、自定義github

在github

上,可以任意

fork

開源倉庫;

自己擁有

fork

後的倉庫的讀寫許可權;

可以推送

pullrequest

給官方倉庫來貢獻**。

忽略某些檔案時,需要編寫.gitignore.gitignore檔案本身要放到版本庫里,並且可以對.gitignore做版本管理。

這裡介紹乙個小技巧,可以簡寫命令,如很多人都用co表示checkoutci表示commitbr表示branch

git config --global alias.co checkout

git config --global alias.ci commit

git config --global alias.br branch

以後提交就可以簡寫成:

git ci -m "worte a file..."
以上是對git的基本理解,如果在以後的研究中還需要繼續加強的git的學習的話,將在進一步的深究,目前僅僅理解了git是什麼,以及它的工作原理和基本操作。

Git版本控制理解(一)

一 集中式版本控制系統與分布式的區別 集中式 版本庫集中存放在 伺服器 即存放版本庫的伺服器 必須先從 伺服器取得最新版本的,處理完後再推送到 伺服器 如svn 缺點是必須聯網。分布式 沒有所謂的 伺服器 每乙個人的電腦就是乙個完整的版本庫,因此工作的時候不需要聯網。協作的時候只需要把各自的修改推送...

Git 分支的理解

幾乎每一種版本控制系統都以某種形式支援分支。使用分支意味著你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。在很多版本控制系統中,這是個昂貴的過程,常常需要建立乙個源 目錄的完整副本,對大型專案來說會花費很長時間。git 的分支可謂是難以置信的輕量級,它的新建操作幾乎可以在瞬間完成,並且在...

git 的個人理解

所有內容均為自己理解的,可能會有些錯誤或偏差,歡迎指正 分布式的版本控制系統,即每個人本地都是乙個完整的版本庫。git主要是對檔案的修改進行跟蹤記錄,通過提交 commit 將這些修改 打包 放入本地倉庫。git中的大部分的指令都是圍繞這幾個概念展開的,只要明白這些基本概念才能理解其他命令都是這做了...