git分支管理:Re從零開始的Git分支

看到的git分支管理的大部分都比較零散,個人在理解的基礎上結合官方部分文檔實踐獲得部分筆記

筆記:

問題:關於是從本地Git還是遠程Github創建分支

回答:推薦從本地Git用Git init命令創建,然後創建分支,然後提交,再去推送到遠程Github

          (遠程Github方法:Github創建倉庫後,在Settings->Branchs->add another branch,添加後可以修改默認分支)

過程:

空文件夾 SoftwareDevelopmentCase 種鼠標右鍵選擇Git Bash Here

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase
$ git init
Initialized empty Git repository in E:/Workspace/web-workspace/SoftwareDevelopme ntCase/.git/

可以看到當前分支是master分支

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase  (master)

創建一個獨立分支 case1_node2xlsx,並且自動切換到case1_nodexlsx分支

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ git checkout --orphan case1_node2xlsx
Switched to a new branch 'case1_node2xlsx'

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$

用nano命令(或者vim)新建一個文本,添加並提交

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ nano case1_node2xlsx.txt

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ ls
case1_node2xlsx.txt

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git add .
warning: LF will be replaced by CRLF in case1_node2xlsx.txt.
The file will have its original line endings in your working directory

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git commit -m 'branch case1_node2xlsx'
[case1_node2xlsx (root-commit) 8b84ec5] branch case1_node2xlsx
 1 file changed, 1 insertion(+)
 create mode 100644 case1_node2xlsx.txt

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git branch
* case1_node2xlsx

此處看到 git branch命令,得到的結果只有一個 case1_node2xlsx

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git checkout --orphan master
Switched to a new branch 'master'

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ nano master.txt

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ ls
case1_node2xlsx.txt  master.txt

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ git add master.txt

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ git commit -m 'orphan branch master create'
[master (root-commit) 51e99a7] orphan branch master create
 2 files changed, 2 insertions(+)
 create mode 100644 case1_node2xlsx.txt
 create mode 100644 master.txt

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ git branch
  case1_node2xlsx
* master

此刻我們建立了2個獨立的分支

在master上創建兩個分支aaa ,bbb

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ git branch aaa

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ git branch bbb

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ git checkout aaa
Switched to branch 'aaa'

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (aaa)
$ git checkout bbb
Switched to branch 'bbb'

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (bbb)

在 case1_node2xlsx 分支上創建ccc分支

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (bbb)
$ git checkout case1_node2xlsx
Switched to branch 'case1_node2xlsx'

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git branch ccc

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git checkout ccc
Switched to branch 'ccc'

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (ccc)
$ git branch
  aaa
  bbb
  case1_node2xlsx
* ccc
  master

分支結構如下

          master                  ---------------   aaa

                                               |

                                               |

                                               --------  bbb

         case1_node2xlsx  ----------------   ccc

 

關於如何看這樣的分支層次結構

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (ccc)
$ git log --graph --decorate --oneline --simplify-by-decoration --all
* 51e99a7 (master, bbb, aaa) orphan branch master create
* 8b84ec5 (HEAD -> ccc, case1_node2xlsx) branch case1_node2xlsx

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (ccc)
$ git branch -vv
  aaa             51e99a7 orphan branch master create
  bbb             51e99a7 orphan branch master create
  case1_node2xlsx 8b84ec5 branch case1_node2xlsx
* ccc             8b84ec5 branch case1_node2xlsx
  master          51e99a7 orphan branch master create

或者,在文件夾目錄下鼠標右鍵Git Gui Here  --> Repository  -->  Visualize All Repository History

刪除分支命令

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (ccc)
$ git checkout case1_node2xlsx
Switched to branch 'case1_node2xlsx'

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git branch ddd

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git branch --contains
* case1_node2xlsx
  ccc
  ddd

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git branch --delete ddd
Deleted branch ddd (was 8b84ec5).

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git branch --contains
* case1_node2xlsx
  ccc

 注意:刪除分支要注意不能刪除默認分支(master或者Default),否則與遠程衝突。

在WebStorm中打開項目(文件夾)

 我們可以在項目名 -> 鼠標右鍵  -> Git -> Repository -> Branches 看到當前有的分支,而且當前分支對應的目錄下文件也是當前分支的

我們把master和case1_node2xlsx 分支推送到遠程去

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git push origin case1_node2xlsx:case1_node2xlsx
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 244 bytes | 244.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'case1_node2xlsx' on GitHub by visiting:
remote:      https://github.com/KaiyouHu/SoftwareDevelopmentCase/pull/new/case1_node2xlsx
remote:
To https://github.com/KaiyouHu/SoftwareDevelopmentCase.git
 * [new branch]      case1_node2xlsx -> case1_node2xlsx

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git push origin master:master
To https://github.com/KaiyouHu/SoftwareDevelopmentCase.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/KaiyouHu/SoftwareDevelopmentCase.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (case1_node2xlsx)
$ git checkout master
Switched to branch 'master'

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ git fetch origin master
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/KaiyouHu/SoftwareDevelopmentCase
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> origin/master

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ git diff master origin/master
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the


love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ git merge origin/master
fatal: refusing to merge unrelated histories

love_paeonia@kaiyouhu MINGW64 /e/Workspace/web-workspace/SoftwareDevelopmentCase (master)
$ git rebase origin/master
First, rewinding head to replay your work on top of it...
Applying: orphan branch master create

在合併master分支的時候,出現了問題。問題在於,Github創建代碼倉時,選了個LICENCE,結果導致衝突。

(以後在Github創建代碼倉時,最好選擇不要.gitignore, LICENCE, README.md,空的不會衝突)

orphan(無父節點或者理解爲根)分支在Github上能體現(常用於多個子項目),--contains查看的分支(子分支)不能體現(這種一般都是dev開發用或者gh-pages部署)

 

總結:

    這樣就可以在一個Repository上開發一個多子項目的工程,在開發的時候,切換分支就行了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章