通常一個項目有一個默認的分支 master 主分支,而後能夠有許多個分支,在別的分支上的操做不會影響到主分支。使用git branch查看當前多多少分支以及當前處於哪一個分支上;執行git branch 分支名稱 建立分支;執行 git checkout 分支名稱 切換當前分支。css
使用 git branch -d 分支名稱 刪除分支 使用git branch -m 當前分支名稱 新分支名稱 修改分支名稱html
laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git branch * master laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git branch slave laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git branch * master slave laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git checkout slave Switched to branch 'slave' laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git branch master * slave laoni@DESKTOP-TPP
在分支上提交作的修改,不會影響到master分支,能夠這麼作,把原有master分支的源碼下到本地,而後建立新的分支,把本身修改後的代碼commit到新分支上。git
eg:在slave分支commit info.py文件,而後再切換到master分支github
切換到master分支後查看提交的記錄沒有add info.py 文件內容也消失了。(若是是新建的文件,那文件也會消失。)vim
git merge 分支名稱 合併分支,最理想的狀態是被合併的分支(slave)裏的文件,是當前分支(master)沒有的,這樣就徹底沒衝突。ide
$ git checkout slave Switched to branch 'slave' laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git branch master * slave laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ ls 456 bb.css dd.css index.html info.py laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ cat info.py asdfsadfsfasfasdf laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git checkout master Switched to branch 'master' laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ ls 456 bb.css dd.css index.html laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git merge slave Updating c5b475a..a068c80 Fast-forward info.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 info.py laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ cat info.py asdfsadfsfasfasdf
使用git diff能夠查看當前分支作了哪些修改,使用git diff master..slave 能夠對比兩個分支的不一樣。spa
PS:修改文件後須要從新add和commitcode
使用git diffhtm
$ ls 456 bb.css dd.css index.html info.py laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ vim info.py laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git diff warning: LF will be replaced by CRLF in info.py. The file will have its original line endings in your working directory. diff --git a/info.py b/info.py index 5c895f9..7e024db 100644 --- a/info.py +++ b/info.py @@ -1 +1,2 @@ -asdfsadfsfasfasdf \ No newline at end of file +asdfsadfsfasfasdf +modify 66666
繼續上面的例子執行git diff master..slaveblog
laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git status On branch slave 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: info.py Untracked files: (use "git add <file>..." to include in what will be committed) dd.css no changes added to commit (use "git add" and/or "git commit -a") laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git add info.py warning: LF will be replaced by CRLF in info.py. The file will have its original line endings in your working directory. laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git status On branch slave Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: info.py Untracked files: (use "git add <file>..." to include in what will be committed) dd.css laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git commit -m "modify info.py" [slave 6abf028] modify info.py 1 file changed, 2 insertions(+), 1 deletion(-) laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git status On branch slave Untracked files: (use "git add <file>..." to include in what will be committed) dd.css nothing added to commit but untracked files present (use "git add" to track) laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git diff master..slave diff --git a/info.py b/info.py index 5c895f9..7e024db 100644 --- a/info.py +++ b/info.py @@ -1 +1,2 @@ -asdfsadfsfasfasdf \ No newline at end of file +asdfsadfsfasfasdf +modify 66666
laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave)
$ git branch
master
* slave
laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave)
$ git checkout master
Switched to branch 'master'
laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master)
$ git merge slave
Updating a068c80..6abf028
Fast-forward
info.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master)
$ cat info.py
asdfsadfsfasfasdf
modify 66666
關於合併衝突代碼的作法:
下面我分別給master和slave建立文件new,其中master的內容是master,slave的new的內容是slave。
laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ vim new laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ cat new master laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git add new warning: LF will be replaced by CRLF in new. The file will have its original line endings in your working directory. laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git commit -m "add new" [master 8b5d2fd] add new 1 file changed, 1 insertion(+) create mode 100644 new laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git checkout slave Switched to branch 'slave' laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ vim new laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git add new warning: LF will be replaced by CRLF in new. The file will have its original line endings in your working directory. laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git commit -m "add new" [slave 775f3ab] add new 1 file changed, 1 insertion(+) create mode 100644 new laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $
接下來要合併衝突代碼:
PS:git返回信息提示有內容衝突文件new,讓咱們修改了new後再commit
laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git checkout master Switched to branch 'master' laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git merge slave Auto-merging new CONFLICT (add/add): Merge conflict in new Automatic merge failed; fix conflicts and then commit the result.
等號上面是當前分支(master)的,等號下面是要被合併的分支(slave),咱們修改這個文件,在衝突內容中選擇一個,刪除另外的,再commit就能夠了。
$ git add new laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master|MERGING) $ git commit -m "modify new" [master 112da02] modify new laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) dd.css nothing added to commit but untracked files present (use "git add" to track) laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git log --oneline 112da02 modify new 775f3ab add new 8b5d2fd add new 6abf028 modify info.py a068c80 add info.py c5b475a Revert "add 123" cfcbd5c add 456 13f5bcb add 123 8110523 Revert "add adc" 74f7cb6 add bb.css 577fab6 Revert "revert abc" e1f2701 add adc 358cdac 添加UI.js 04c94a8 添加一個文件index.html
接下來有第三種合併方式,會保留合併分支的記錄
$ git branch * master slave laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git checkout slave Switched to branch 'slave' laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ ls 456 bb.css dd.css index.html info.py new laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ vim 998 laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git add 998 warning: LF will be replaced by CRLF in 998. The file will have its original line endings in your working directory. laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git commit -m "add 998" [slave 6957dae] add 998 1 file changed, 1 insertion(+) create mode 100644 998 laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (slave) $ git checkout master Switched to branch 'master' laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git merge slave --no-ff -m "merge slave --no--ff" Merge made by the 'recursive' strategy. 998 | 1 + 1 file changed, 1 insertion(+) create mode 100644 998 laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/github_test (master) $ git log --oneline bdba943 merge slave --no--ff 6957dae add 998 112da02 modify new 775f3ab add new 8b5d2fd add new 6abf028 modify info.py a068c80 add info.py c5b475a Revert "add 123" cfcbd5c add 456 13f5bcb add 123 8110523 Revert "add adc" 74f7cb6 add bb.css 577fab6 Revert "revert abc" e1f2701 add adc 358cdac 添加UI.js 04c94a8 添加一個文件index.html
總結:分支合併有三種:
一、faster快進的合併分支,這種最理想沒文件內容衝突,但git log裏查看不到合併記錄。
二、衝突合併,修改衝突的文件再add和commit。
三、禁用faster,這種方式會記錄合併分支記錄,在git log裏能夠查到。