Git管理分支
分支操作允許創建另一路線/方向上開發。我們可以使用這個操作將開發過程分爲兩個不同的方向。 例如,我們發佈了1.0
版本的產品,可能需要創建一個分支,以便將2.0
功能的開發與1.0
版本中錯誤修復分開。
創建分支
我們可使用git branch <branch name>
命令創建一個新的分支。可以從現有的分支創建一個新的分支。 也可以使用特定的提交或標籤作爲起點創建分支。 如果沒有提供任何特定的提交ID,那麼將以HEAD
作爲起點來創建分支。參考如下代碼,創建一個分支:new_branch -
$ git branch new_branch
Administrator@MY-PC /D/worksp/sample (master)
$ git branch
* master
new_branch
執行上命令後,它創建了一個新的分支:new_branch; 使用git branch
命令列出可用的分支。Git在當前簽出分支之前顯示一個星號。
創建分支操作的圖示表示如下:
切換分支
使用git checkout
命令在分支之間切換。
$ git checkout new_branch
M src/string.py
Switched to branch 'new_branch'
創建和切換分支的快捷方式
在上面的例子中,分別使用兩個命令創建和切換分支。 Git爲checkout
命令提供-b
選項; 此操作將創建一個新的分支,並立即切換到新分支。
$ git checkout -b test_branch
M src/string.py
Switched to a new branch 'test_branch'
Administrator@MY-PC /D/worksp/sample (test_branch)
$ git branch
master
new_branch
* test_branch
刪除分支
可以通過向git branch
命令提供-D
選項來刪除分支。 但在刪除現有分支之前,請切換到其他分支。
如上面所示,目前在test_branch
分支,如要想刪除該分支。需要先切換到其它分支再刪除此分支,如下所示。
$ git branch
master
new_branch
* test_branch
Administrator@MY-PC /D/worksp/sample (test_branch)
$ git checkout master
M src/string.py
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 4 commits.
(use "git push" to publish your local commits)
Administrator@MY-PC /D/worksp/sample (master)
$ git branch -D test_branch
Deleted branch test_branch (was b759faf).
Administrator@MY-PC /D/worksp/sample (master)
當前剩下的分支如下 -
$ git branch
* master
new_branch
重命名分支
假設需要在項目中添加對寬字符的支持。並且已經創建了一個新的分支,但分支名稱需要重新命名。那麼可通過使用-m
選項後跟舊的分支名稱和新的分支名稱來更改/重新命名分支名稱。
$ git branch
* master
new_branch
Administrator@MY-PC /D/worksp/sample (master)
$ git branch -m new_branch wchar_support
現在,使用git branch
命令顯示新的分支名稱。
$ git branch
* master
wchar_support
合併兩個分支
實現一個函數來返回寬字符串的字符串長度。新的代碼將顯示如下:
$ git branch
master
* wchar_support
$ pwd
/D/worksp/sample
Administrator@MY-PC /D/worksp/sample (master)
$ git diff
diff --git a/src/string.py b/src/string.py
index 18f165f..89e82b3 100644
--- a/src/string.py
+++ b/src/string.py
@@ -8,3 +8,9 @@ print ("var2[1:5]: ", var2[1:5]) # 切片 加索引
def my_strcat(str1, str2):
return (str1+str2)
+
+a = '我'
+b = 'ab'
+ab = '我ab'
+
+print(len(a), len(b), len(ab), len('='))
\ No newline at end of file
Administrator@MY-PC /D/worksp/sample (master)
假設經過測試,代碼沒有問題,最後將其變更推送到新分行。
$ git status
On branch master
Your branch is ahead of 'origin/master' by 5 commits.
(use "git push" to publish your local commits)
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: src/string.py
no changes added to commit (use "git add" and/or "git commit -a")
Administrator@MY-PC /D/worksp/sample (master)
$ git add src/string.py
Administrator@MY-PC /D/worksp/sample (master)
$ git commit -m 'Added w_strlen function to return string lenght of wchar_t
> string'
[master 6bab70a] Added w_strlen function to return string lenght of wchar_t string
1 file changed, 6 insertions(+)
請注意,下面將把這些更改推送到新的分支,所以這裏使用的分支名稱爲wchar_support
而不是master
分支。
執行過程及結果如下所示 -
$ git push origin wchar_support
Username for 'http://git.oschina.net': [email protected]
Password for 'http://[email protected]@git.oschina.net':
Counting objects: 18, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (15/15), 1.72 KiB | 0 bytes/s, done.
Total 15 (delta 3), reused 0 (delta 0)
To http://git.oschina.net/yiibai/sample.git
* [new branch] wchar_support -> wchar_support
Administrator@MY-PC /D/worksp/sample (master)
提交更改後,新分支將顯示如下:
如果其他開發人員很想知道,我們在私人分支上做什麼,那麼可從wchar_support
分支檢查日誌。
yiibai@ubuntu:~/git/sample$ git log origin/wchar_support -2
輸出結果如下 -
yiibai@ubuntu:~/git/sample$ pwd
/home/yiibai/git/sample
yiibai@ubuntu:~/git/sample$ git pull
remote: Counting objects: 15, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 15 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (15/15), done.
From http://git.oschina.net/yiibai/sample
* [new branch] wchar_support -> origin/wchar_support
Already up-to-date.
yiibai@ubuntu:~/git/sample$ git log origin/wchar_support -2
commit b759fafeb2a58bd1104f4142e4c0ababdadce01d
Author: maxsu <[email protected]>
Date: Mon Jul 10 23:44:24 2017 +0800
fdasjkfdlaks
commit de08fcc70df3a31c788a2e926263b18498d2df09
Author: maxsu <[email protected]>
Date: Mon Jul 10 23:40:00 2017 +0800
delete
yiibai@ubuntu:~/git/sample$
通過查看提交消息,其他開發人員(minsu
)到有一個寬字符的相關計算函數,他希望在master
分支中也要有相同的功能。不用重新執行代碼編寫同樣的代碼,而是通過將分支與主分支合併來執行代碼的合併。下面來看看應該怎麼做?
yiibai@ubuntu:~/git/sample$ git branch
* master
yiibai@ubuntu:~/git/sample$ pwd
/home/yiibai/git/sample
yiibai@ubuntu:~/git/sample$ git merge origin/wchar_support
Updating 44ea8e4..b759faf
Fast-forward
src/string.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
yiibai@ubuntu:~/git/sample$
合併操作後,master
分支顯示如下:
現在,分支wchar_support
已經和master
分支合併了。 可以通過查看提交消息或者通過查看string.py
文件中的修改來驗證它。
yiibai@ubuntu:~/git/sample$ git branch
* master
yiibai@ubuntu:~/git/sample$ cd src/
yiibai@ubuntu:~/git/sample/src$ git log -2
commit b759fafeb2a58bd1104f4142e4c0ababdadce01d
Author: maxsu <[email protected]>
Date: Mon Jul 10 23:44:24 2017 +0800
fdasjkfdlaks
commit de08fcc70df3a31c788a2e926263b18498d2df09
Author: maxsu <[email protected]>
Date: Mon Jul 10 23:40:00 2017 +0800
上述命令將產生以下結果。
#!/usr/bin/python3
var1 = 'Hello World!'
var2 = "Python Programming"
print ("var1[0]: ", var1[0])
print ("var2[1:5]: ", var2[1:5]) # 切片 加索引
def my_strcat(str1, str2):
return (str1+str2)
a = '我'
b = 'ab'
ab = '我ab'
print(len(a), len(b), len(ab), len('='))
測試後,就可將代碼更改推送到master
分支了。
$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To http://git.oschina.net/yiibai/sample.git
5776472..64192f9 master −> master