分布式版本控制 Git(二)

2021-06-28 12:22:41 字數 4383 閱讀 9890

分支在實際中有什麼用呢?假設你準備開發乙個新功能,但是需要兩周才能完成,第一周你寫了50%的**,如果立刻提交,由於**還沒寫完,不完整的**庫會導致別人不能幹活了。如果等**全部寫完再一次提交,又存在丟失每天進度的巨大風險。

現在有了分支,就不用怕了。你建立了乙個屬於你自己的分支,別人看不到,還繼續在原來的分支上正常工作,而你在自己的分支上幹活,想提交就提交,直到開發完畢後,再一次性合併到原來的分支上,這樣,既安全,又不影響別人工作。

head嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,head指向的就是當前分支。

當我們建立新的分支,例如dev時,git新建了乙個指標叫dev,指向master相同的提交,再把head指向dev,就表示當前分支在dev上:

假如我們在dev上的工作完成了,就可以把dev合併到master上。git怎麼合併呢?最簡單的方法,就是直接把master指向dev的當前提交,就完成了合併:

案例:第一步:建立dev分支,然後切換到dev分支:

$ git checkout -b dev

等價於:$ git branch dev

$ git checkout dev

第二步:檢視當前分支:
$ git branch
第三步:在當前dev分支上,編寫檔案test.txt,並提交到dev分支:
$ git add test.txt
第四步:切換分支到master:
$ git checkout master
此時,在master分支上並不能看到test.txt檔案

第五步:把dev分支的工作成果合併到master分支上:

$ git merge dev
第六步:刪除dev分支:
$ git branch -d dev
第一步:建立新分支,並在此分支上修改test.txt檔案,然後提交:

$ git checkout -b feature1
修改test.txt檔案

$ git add test.txt -m "change text on feature1"
第二步:切換到master分支,修改test.txt檔案,然後提交:

$ git checkout master
修改test.txt檔案

$ git add text.txt -m "change text on master"
第三步:將feature1分支合併到master

$ git merge feature1
此時,由於衝突報錯了,現需要修改其中一分支下的檔案,然後重新提交,合併!

檢視分支合併情況:

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

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

當正在dev分支上開發新任務時,測試組給提了乙個線上的bug需及時修復,這是就需要在master分支上建立新分支來進行修復,但是開發的現場又需要儲存下來!

第一步:檢視當前分支資訊,當前分支dev上還有未完成待提交的檔案,並儲存現場:

$ git status

$ git stash

第二步:切換到master分支,並建立bug分支,進行bug修復:

$ git checkout master

$ git checkout -b issue-bug001

$ git add text.txt

$ git commit -m "resolve bug001"

第三步:切換到master分支,合併提交,然後刪除臨時分支:

$ git checkout master

$ git merge --no--ff -m "merge bug001" issue-bug001

$ git branch -d issue-bug001

第四步:切換到dev分支,恢復現場,繼續工作:

$ git checkout dev

$ git status

$ git stash list

$ git stash drop

恢復現場的兩種方式:

刪除現場:$ git stash drop

2. 恢復的同時刪除:$ git stash pop

沒有被合併的分支,刪除時會報錯:

$ git branch -d
使用-d進行強行刪除:

$ git branch -d
1. 當你從遠端倉庫轉殖時,實際上git自動把本地的master分支和遠端的master分支對應起來了,並且,遠端倉庫的預設名稱是origin

檢視遠端庫的資訊:git remote

檢視詳細遠端庫資訊:git remote -v

2. 推送分支,就是把該分支上的所有本地提交推送到遠端庫。推送時,要指定本地分支,這樣,git就會把該分支推送到遠端庫對應的遠端分支上

推送master分支:$ git push origin master

推送dev分支:$ git push origin dev

3. 抓取分支,

獲取遠端分支:$ git clone [email protected]:381510688/learninggit.git

建立遠端origin的dev分支到本地:$ git checkout -b dev origin/dev

把dev分支修改的檔案push到遠端:$ git commit -m "add modify file"

$ git push origin dev

如本地沒有與遠端dev建立連線,需建立連線:

把最新的提交從origin/dev抓下來:$ git pull

然後手動修改衝突,合併後再提交

git的標籤是版本庫的快照,其本質是指向某個commit的指標。

1. 建立標籤

切換到需要打標籤的分支上:$ git checkout master

打標籤:$ git tag v1.0

檢視所有標籤:$ git tag

2. 在歷史的commit id上打標籤

檢視歷史commit id:$ git log --pretty=oneline --abbrev-commit

指定commit id打標籤:$ git tag v1.1 6224966

帶說明的標籤:$ git tag -a v1.2 -m "version 1.2 released" 6224967

3. 檢視標籤資訊:
$ git show v1.1
4. 用pgp簽名標籤:
git tag -s -m "blablabla..."
5. 推送某個標籤到遠端:
$ git push origin v1.0
推送全部標籤到遠端:
$ git push origin --tags
6. 刪除本地標籤:
$ git tag -d v1.2
刪除遠端標籤:
$ git tag -d v1.1

$ gti push origin :refs/tags/v1.1

GIT分布式版本控制

git config global user.name your name git config global user.email email example.com git init初始化建立版本庫 git clone url從網路上轉殖repository,注意clone是複製了history...

Git(分布式版本控制)

git 分布式版本控制 git伺服器端 root web1 yum install y git 安裝git root web1 mkdir var git root web1 git init var git project bare 建立乙個空的git倉庫 初始化空的 git 版本庫於 var g...

分布式版本控制(二)

本篇介紹bazaar 我知道bazaar是從livid那裡看到的,他這篇介紹基本上就是翻譯bazaar官方的乙個快速入門文件,強烈推薦參考一下。bazaar 的缺點是速度太慢。它的慢倒不是像雲風所說的那樣,對大專案太慢,而是因為它是純python的程式,在windows下每次執行都要啟動python...