git config命令
git help命令
git init命令
git add命令
git clone命令
git status命令
git diff命令
git commit命令
git reset命令
git rm命令
git mv命令
git branch命令
git checkout命令
git merge命令
git mergetool命令
git log命令
git stash命令
git tag命令
git fetch命令
git pull命令
git push命令
git remote命令
git submodule命令
git show命令
git shortlog命令
git describe命令
git rebase命令
Git處理衝突
假設要在wchar_support
分支中執行更改,修改wchar_support
分支中的代碼。添加一個計算長度的函數:count_len(obj)
,代碼變化如下 -
$ git branch
master
* wchar_support
Administrator@MY-PC /D/worksp/sample/src (wchar_support)
$ git diff
diff --git a/src/string.py b/src/string.py
index ba6d584..4307fe2 100644
--- a/src/string.py
+++ b/src/string.py
@@ -13,4 +13,7 @@ a = '我' #
b = 'ab'
ab = '我ab'
-print(len(a), len(b), len(ab), len('='))
\ No newline at end of file
+print(len(a), len(b), len(ab), len('='))
+
+def count_len(obj):
+ return len(obj)
\ No newline at end of file
假設驗證代碼後,沒有問題就提交這些更改。
$ git status
On branch wchar_support
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: string.py
no changes added to commit (use "git add" and/or "git commit -a")
Administrator@MY-PC /D/worksp/sample/src (wchar_support)
$ git add string.py
Administrator@MY-PC /D/worksp/sample/src (wchar_support)
$ git commit -m "add new function: count_len(obj)"
[wchar_support 1cc9ddb] add new function: count_len(obj)
1 file changed, 4 insertions(+), 1 deletion(-)
執行 master 分支變更
同時在master
分支中,另外一個開發人員(minsu
)還會更改了內容,並將其更改推送到master
分支。
yiibai@ubuntu:~/git/sample/src$ git diff
diff --git a/src/string.py b/src/string.py
index ba6d584..5eb2a5d 100644
--- a/src/string.py
+++ b/src/string.py
@@ -13,4 +13,6 @@ a = '我' #
b = 'ab'
ab = '我ab'
-print(len(a), len(b), len(ab), len('='))
\ No newline at end of file
+print(len(a), len(b), len(ab), len('='))
+def obj_len(obj):
+ return len(obj)
yiibai@ubuntu:~/git/sample/src$
驗證差異後,現在就提交更新內容。
yiibai@ubuntu:~/git/sample/src$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
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: string.py
no changes added to commit (use "git add" and/or "git commit -a")
yiibai@ubuntu:~/git/sample/src$ git add string.py
yiibai@ubuntu:~/git/sample/src$ git commit -m 'Changed function name from w_strlen to my_wc_strlen'
[master 07cd5af] Changed function name from w_strlen to my_wc_strlen
1 file changed, 3 insertions(+), 1 deletion(-)
yiibai@ubuntu:~/git/sample/src$ git push origin master
Username for 'http://git.oschina.net': [email protected]
Password for 'http://[email protected]@git.oschina.net':
Counting objects: 4, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 398 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
To http://git.oschina.net/yiibai/sample.git
e7d1734..07cd5af master -> master
在wchar_support
分支上,我們已經實現了一個count_len(obj)
函數。假設經過測試後,提交併將其更改推送到wchar_support
分支。
出現衝突
假設另外一個開發人員(minsu
)想看看我們在wchar_branch
分支上做了什麼,他試圖從wchar_support
分支中拉出最新的變化,但是Git會中斷這個操作,並顯示以下錯誤消息。
yiibai@ubuntu:~/git/sample/src$ git pull origin wchar_support
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From http://git.oschina.net/yiibai/sample
* branch wchar_support -> FETCH_HEAD
e7d1734..1cc9ddb wchar_support -> origin/wchar_support
Auto-merging src/string.py
CONFLICT (content): Merge conflict in src/string.py
Automatic merge failed; fix conflicts and then commit the result.
yiibai@ubuntu:~/git/sample/src$
解決衝突
從錯誤消息中,很明顯文件:src/string.py 中存在衝突。運行git diff
命令查看更多細節。
yiibai@ubuntu:~/git/sample/src$ git diff
diff --cc src/string.py
index 5eb2a5d,4307fe2..0000000
--- a/src/string.py
+++ b/src/string.py
@@@ -14,5 -14,6 +14,11 @@@ b = 'ab
ab = '我ab'
print(len(a), len(b), len(ab), len('='))
++<<<<<<< HEAD
+def obj_len(obj):
+ return len(obj)
++=======
+
+ def count_len(obj):
- return len(obj)
++ return len(obj)
++>>>>>>> 1cc9ddb410561976b006106590481cc01b79080e
yiibai@ubuntu:~/git/sample/src$
由於兩個人同進修改了string.py
中的代碼,所以Git處於混亂狀態,並且要求用戶手動解決衝突。
假設maxsu
決定保留修改的代碼,並刪除了自己定義的函數:obj_len(obj)
。刪除衝突標記後(<<<<<<<<<<<<<<<<
和 >>>>>>>>>>>>>>>>>>>>
的行),現在衝突的代碼如下所示 -
解決衝突需要修改代碼後,如下所示 -
git diff
將如下所示 -
yiibai@ubuntu:~/git/sample/src$ git diff
diff --cc src/string.py
index 5eb2a5d,4307fe2..0000000
--- a/src/string.py
+++ b/src/string.py
@@@ -14,5 -14,6 +14,7 @@@ b = 'ab
ab = '我ab'
print(len(a), len(b), len(ab), len('='))
+
-def count_len(obj):
- return len(obj)
+def obj_len(obj):
+ return len(obj)
++
yiibai@ubuntu:~/git/sample/src$
由於minsu
已經修改了這些文件,所以必須首先提交這些修改,然後就可以提出這些修改。如下所示 -
yiibai@ubuntu:~/git/sample/src$ git add .
yiibai@ubuntu:~/git/sample/src$ git commit -a -m 'Resolved conflict'
[master 33f0406] Resolved conflict
yiibai@ubuntu:~/git/sample/src$ git pull origin wchar_support
已經解決了衝突,現在執行git pull
應該沒有問題了。