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