git branch 分支和分支合並


一般一個項目有一個默認的分支 master 主分支,然后可以有許多個分支,在別的分支上的操作不會影響到主分支。使用git branch查看當前多多少分支以及當前處於哪個分支上;執行git branch 分支名稱  創建分支;執行 git checkout 分支名稱 切換當前分支。

使用 git branch -d 分支名稱 刪除分支 使用git branch -m 當前分支名稱 新分支名稱   修改分支名稱

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到新分支上。

eg:在slave分支commit info.py文件,然后再切換到master分支

 切換到master分支后查看提交的記錄沒有add info.py 文件內容也消失了。(如果是新建的文件,那文件也會消失。)

 

git merge 分支名稱 合並分支,最理想的狀態是被合並的分支(slave)里的文件,是當前分支(master)沒有的,這樣就完全沒沖突。

$ 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 merge 分支名稱

使用git diff可以查看當前分支做了哪些修改,使用git diff master..slave 可以對比兩個分支的不同。

PS:修改文件后需要重新add和commit

使用git diff

$ 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..slave

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)
$
master 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

 

 總結:分支合並有三種:

  1、faster快進的合並分支,這種最理想沒文件內容沖突,但git log里查看不到合並記錄。

  2、沖突合並,修改沖突的文件再add和commit。

  3、禁用faster,這種方式會記錄合並分支記錄,在git log里可以查到。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM