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上开发一个多子项目的工程,在开发的时候,切换分支就行了!

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