Git(8)-分支
分支
- 1. 分支名
- 2. 創建分支-git branch
- 3. 查看分支-git show-branch
- 4. 檢出分支
- 4.1 有未提交的修改時進行檢出
- 4.2 合并變更到不同的分支git checkout -m
- 5. 分離HEAD 分支
- 6.刪除分支
分支操作命令概覽
git branch # 列出版本庫中的分支 git branch -r # 列出遠程跟蹤分支 git branch -a # 列出版本庫中的分支和遠程跟蹤分支 git branch branchname1 # 新建一個branchname1 分支 git branch branchname3 [starting CID] # 基于starting CID新建 branchname3分支 git checkout branchname1 # 切換到branchname1分支(又叫檢出xxx分支) git checkout -b newbranchname # 新建一個分支,并切換到該分支 git branch -d branchname2 [starting CID] # 刪除分支git checkout -- file1 # 檢出索引中的文件file1 git checkout commit_x -- file1 # 檢出commit_x中的提file1分支是軟件項目中啟動一條單獨開發線的基本方法。
**分支-**動態名字,隨著每次的提交移動,跟隨你持續開發的過程。
**標簽-**靜態名字,不隨著時間的推移而改變,一旦應用不應該對它做任何改動,可用于標識擁有關鍵差異特征的提交點位。
可以使用同一個名字來命名分支和標簽,但是不推薦。
1. 分支名
默認分支是master(正在改為main),分支名字始終指向改分支上的最近提交版本。
使用層次分支- bug/pr-1023, bug/pr-17 這種層次分支支持通配符選擇。
路徑層次分支命名具有一些通用的規則,分支命名規則由 git check-ref-format 底層命令強制檢測。
2. 創建分支-git branch
在任何時候,版本庫中只有一個分支是活動的?;顒臃种Q定了工作目錄里的檢出文件。
當需要把本地分支發布,需要顯示指明發布分支的名稱。
git branch 不帶分支名稱時,可用于列出版本庫中的分支名,帶星號的分支名標識當前的活動分支。
git branch # 列出版本庫中的分支 git branch -r # 列出遠程跟蹤分支 git branch -a # 列出版本庫中的分支和遠程跟蹤分支3. 查看分支-git show-branch
按時間順序\)列出對一個或多個分支有貢獻的提交。同樣可以帶-r,和-a兩種可選參數。 \
git show-branch # 該輸出被破折號分為兩個部分,..... * [alternate] Initial 3 line file # 方括號中的為分支名,后面跟著最近一次提交! [master] Another file # * 標識當前活動分支上的提交 -- # + 表示提交在一個分支中【說的什么話?】+ [master] Another file # - 表示一個合并提交 *+ [alternate] Initial 3 line filegit show-branch bug/pr-1 bug/pr-2 # 查看兩個分支的提交信息,支持通配符匹配更多的分支4. 檢出分支
工作目錄一次只能反應一個分支。git checkout用于切換不同的分支。它改變了工作樹文件和目錄結構來匹配切換分支。git checkout branchname 實現改了通過分支名來檢出分支頭部。
4.1 有未提交的修改時進行檢出
工作目錄里未被追蹤的文件的目錄始終會被置之不理,git不會刪除或修改他們。如果一個文件在本分支上修改了,但是沒有被新分支追蹤,git 會發出錯誤信息,并拒絕檢出到目標分支。
$ git checkout dev error: Your local changes to the following files would be overwritten by checkout:git_checkout_test Please commit your changes or stash them before you switch branches. Aborting$ cat git_checkout_test git checkout test $ git diff git_checkout_test diff --git a/git_checkout_test b/git_checkout_test index e69de29..9747ad6 100644 --- a/git_checkout_test +++ b/git_checkout_test @@ -0,0 +1 @@ +git checkout test$ git show dev:git_checkout_test # 查看另一個分支中的文件 fatal: path 'git_checkout_test' exists on disk, but not in 'dev'解決方法
1.提交新的更改到當前分支
2.提交新的更改到另一分支:
a). stash
b). 合并變更到不同的分支。
4.2 合并變更到不同的分支git checkout -m
-m 選項將 本地修改合并到目標分支的工作目錄中,并留下合并沖突指示[可能會沒有],我們需要進一步解決存在的沖突。
% git checkout dev error: Your local changes to the following files would be overwritten by checkout:git_checkout_test Please commit your changes or stash them before you switch branches. Aborting % git checkout -m dev A git_checkout_test M hello.txt Switched to branch 'dev' # dev 分支上修改文件,再想切換回master分支, 執行合并切換操作不行啊。 % git checkout -m master fatal: cannot continue with staged changes in the following files: git_checkout_test hello.txt在master 分支中編輯文件,突然意識到需要將所有的修改提交到dev2分支上,那么就新建并切換到新的分支上。
% git checkout -b dev2 Switched to a new branch 'dev2' % git status On branch dev2 Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: git_checkout_testno changes added to commit (use "git add" and/or "git commit -a")5. 分離HEAD 分支
git checkout branchname 實現改了通過分支名來檢出分支頭部。git checkout 可以檢出任何提交,如果檢出的提交不是該分支的頭部,Git 會創建一個分離的HEAD(detached HEAD),以下的情況,Git都會創建一個分離的HEAD:
如果1: 想要保留在detached HEAD狀態下的開發內容,那就新建一個分支。
git checkout -b new_branch如果2: 只是在detached HEAD狀態下驗證某些東西,不想保存相關操作,直接切換回某個一分支即可。
git checkout branchname6.刪除分支
git branch -d branchname2默認規則1:不能刪除當前分支。
默認規則2: 不會允許刪除一個 包含不存在當前分支提交的分支。就是說,要刪除的分支不是當前分支的祖先,那么刪除該分支將會造成某些開發不可留。但是可以通過 -D強制刪除,可以選擇在刪除之前進行一次合入操縱。
總結
- 上一篇: lua元表的理解
- 下一篇: (十七)深入浅出TCPIP之UDP打洞原