看到的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上開發一個多子項目的工程,在開發的時候,切換分支就行了!