和Leon一起從頭學Git 四

2021-10-04 05:10:20 字數 4556 閱讀 9168

幾乎每一種版本控制系統都以某種形式支援分支。使用分支意味著你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。

有人把 git 的分支模型稱為"必殺技特性",而正是因為它,將 git 從版本控制系統家族裡區分出來。

命令格式:git branch

沒有引數時,git branch 會列出你在本地的分支。

$ git branch

* master

此例的意思就是,我們有乙個叫做"master"的分支,並且該分支是當前分支。

當你執行 git init 的時候,預設情況下 git 就會為你建立"master"分支。

命令格式:git branch

$ git branch dev

$ git branch

* master

dev

現在我們可以看到,有了乙個新分支dev。

使用分支可以將工作切分開來,從而讓我們能夠在不同上下文中做事,並來回切換。

命令格式:git checkout

$ git checkout dev

$ git branch

master

* dev

當你切換分支的時候,git 會用該分支的最後提交的快照替換你的工作目錄的內容, 所以多個分支不需要多個目錄。

你在主線上提交了更新之後建立了新分支dev,後來接著在master主線上又更新了幾次提交,但是你突然又想回到建立dev分支時的狀態,你可以切換到"dev"分支,git 將還原你的工作目錄到你建立分支時候的樣子。

$ ls

readme hello.php

$ git rm hello.php

$ echo 'leon1023.git' > test.txt

$ git add .

$ git commit -m 'add test.txt'

[master 048598f] add test.txt

2 files changed, 1 insertion(+), 3 deletions(-)

delete mode 100644 hello.php

create mode 100644 test.txt

$ ls

readme test.txt

$ git checkout dev

switched to branch 'dev'

$ ls

readme hello.php

當我們切換到"dev"分支的時候,我們新增的新檔案test.txt被移除了, 原來被刪除的檔案hello.php檔案又出現了。切換回"master"分支的時候,它們又重新出現了。

$ git checkout master

switched to branch 'master'

$ ls

readme test.txt

命令格式:git branch -d

例如我們要刪除"testing"分支:

$ git branch

* master

testing

$ git branch -d testing

deleted branch testing (was 85fc7e7).

$ git branch

* master

命令格式:git merge

$ git branch

* master

newtest

$ ls

readm test.txt test2.txt

$ git merge newtest

updating 2e082b7..556f0a0

fast-forward

test2.txt | 1 -

1 file changed, 1 deletion(-)

delete mode 100644 test2.txt

$ ls

readme test.txt

以上例項中我們將 newtest 分支合併到主分支去,test2.txt 檔案被刪除。

合併並不僅僅是簡單的檔案新增、移除的操作,git 也會合併修改。

$ git branch

* master

$ cat test.txt

leon1023.git

首先,我們建立乙個叫做"change_site"的分支,切換過去,我們將內容改為www.github.com

$ git checkout -b change_site

switched to a new branch 'change_site'

$ vim test.txt

$ head -1 test.txt

www.github.com

$ git commit -am 'changed the site'

[change_site d7e7346] changed the site

1 file changed, 1 insertion(+), 1 deletion(-)

將修改的內容提交到 "change_site" 分支中。 現在,假如切換回 "master" 分支我們可以看內容恢復到我們修改前的,我們再次修改test.txt檔案。

$ git checkout master

switched to branch 'master'

$ head -1 test.txt

leon1023.git

$ vim test.txt

$ cat test.txt

leon1023.git

a new line

$ git diff

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

index 704cce7..f84c2a4 100644

--- a/test.txt

+++ b/test.txt

@@ -1 +1,2 @@

leon1023.git

+a new line.com

$ git commit -am '新增加一行'

[master 14b4dca] 新增加一行

1 file changed, 1 insertion(+)

現在這些改變已經記錄到我的 "master" 分支了。接下來我們將 "change_site" 分支合併過來。

$ git merge change_site

auto-merging test.txt

conflict (content): merge conflict in test.txt

automatic merge failed; fix conflicts and then commit the result.

$ cat test.txt

<<<<<<< head

leon1023.git

a new line

*****==

www.github.com

>>>>>>> change_site

我們將前乙個分支合併到 "master" 分支,乙個合併衝突就出現了,接下來我們需要手動去修改它。

$ vim test.txt 

$ cat test.txt

www.github.com

a new line.

$ git diff

diff --cc test.txt

index f84c2a4,bccb7c2..0000000

--- a/test.txt

+++ b/test.txt

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

- leon1023.git

+ www.github.com

+ a new line

在 git 中,我們可以用 git add 要告訴 git 檔案衝突已經解決

$ git status -s

?? test.txt

$ git add test.txt

$ git status -s

m test.txt

$ git commit

[master 88afe0e] merge branch 'change_site'

現在我們成功解決了合併中的衝突,並提交了結果。

一起學Python(四)

今天主要講一下,列表 字典 元組的增刪改查,以及合併 取值 1.增listdata listdata.insert len listdata 1,insertname print listdata 輸出結果為 name insertname 2.刪 listdata name 11,true lis...

一起學Git 欲學Git請先忘記

啊!錯了錯了,欲學git,請先忘記。倚天屠龍記中一段描寫的非常精彩,是關於張無忌如何學到太極拳和太極劍的,摘錄如下 張三丰道 老道這路太極劍法能得八臂神劍指點幾招,榮寵無量。無忌,你有佩劍麼?小昭上前幾步,呈上張無忌從趙敏處取來的那柄木製假倚天劍。張三丰接在手裡,笑道 是木劍?老道這不是用來畫符捏訣...

一起學演算法

我堅信,機會永遠屬於有準備的人,其羨慕他人的成功,不如從此刻起,積累足夠多的知識和面試經驗,為將來進入更好的公司做好充分的準備!演算法崗是現在最火的崗位,這個崗位要求對oi演算法非常熟悉。常見的oi演算法有 模擬 字首和 差分 高精度計算 排序 貪心 分治 二分查詢 廣度搜尋 深度搜尋 字串相關演算...