標籤:style 使用 io strong 檔案 for ar 問題
分支是什嗎?
分支就像樹分出的樹枝,不同的是,它們之間可以互相合并。
將版本的推進想象成一個鏈表的伸長: version 1.0 ==》 version 2.0 ==》version3.0 。
master是主要的分支基本上用於發布產品。你可以從master分出一個dev,在上面建立新功能,或者修bug然後調試。最後再合并到master裡面。就像下面這樣。
master分支: version 1.0=========》version 2.0===...
\ / (merge)
dev分支: \=version 1.5=/=========...
甚至還可以有更多分支
master分支: version 1.0=========》version 2.0===...
\ / (merge)
dev分支 : \→→→O→→→→ O=========...
\ / (merge)
Hanson分支: \ -> 修BUG ->/
分支不主動刪除是不會消失的。
(另外,目前的版本可以認為是一個指標指向鏈表最後一個節點,reset (第二章) 命令 就是把指標往前移,revert命令還是向後移。 )
如何管理分支?
1.建立與查看分支:
現在我們要建立一個名為dev的分支。(Dev在軟體開發中多用於開發軟體的代號,與Beta(測試版)的意思相近,其意思為"開發中的版本" 即development version或development edition etc。)建立分支的命令是 $git branch dev 移動到指定分支的命令是 $git checkout dev
也有一個將兩個命令合起來的簡便方法:$git checkout -b dev 這樣就直接建立並轉到分支dev上。(相當於當前master版本的一個副本。)
在windows上的git bash上可以通過每行命令上面那行最後的括弧確定現在是哪個分支。在linux上沒有。
那如何查看當前有哪些分支和確定在哪條分支上呢? 輸入 :$git branch ,會列出所有分支,分支前面的星號就是當前所在分支。
$git branch
*dev
master
2.合并與刪除分支:
將工作區內容修改後 使用 $git add hello.txt 和 $git commit hello.txt -m "modify" 上傳就dev分支
然後 $git checkout master 切換到master分支後,輸入 $git merge dev 這樣dev就會融入master。
若是想刪除掉dev分支 輸入$ git branch -d dev 即可。(如果沒有合并就想要廢棄這條分支 需要使用$git branch -D dev)
在使用merge命令時,可以添加參數 -m "blabla" 也就是添加備忘。
還有一個參數是 --no-ff :
顧名思義 這個參數的意思是 不要FF模式。
FF 即 fast forward ,這種模式下,刪除分支後,會丟掉分支資訊。 就像這個分支從來沒存在過一樣。
而如果使用 --no-ff 就會我開頭舉的例子,Hanson分支被刪除後仍然存在於記錄中。會在merge時產生一個新的commit 。
這條命令會是這樣
git merge --no-ff -m "merge with no-ff" Hanson
另外還有一些原則需要遵守
master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面幹活;
那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合并到master上,在master分支發布1.0版本;
你和你的小夥伴們每個人都在dev分支上幹活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。
或許你已經想到了這個問題 “要是合并的時候有衝突怎麼辦?”
比如兩個分支不約而同地修改了同一行。 在master上 你改了 hello.txt 最後一行,在dev上也改了hello.txt最後一行都提交上去了。
git是這樣做的:合并的時候git發現了這樣的衝突,它只好試圖將兩行合起來,並 提示你:
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
你從這知道 需要你手動變更檔合并 然後提交。
輸入$git status 可以查看衝突的檔案
# On branch master# Your branch is ahead of ‘origin/master‘ by 1 commits. (這一句是說當前的master超前遠程倉庫的master一個commit)## Unmerged paths:# (use "git add/rm <file>..." as appropriate to mark resolution)## both modified: hello.txt#no changes added to commit (use "git add" and/or "git commit -a")
開啟對應的 hello.txt 檔案 發現你分別修改的兩行是以這樣的形式存在在檔案中:
<<<<<<< HEAD………的……=======………地……>>>>>>> dev
這樣就標記了不同的分支中的內容 然後需要你手動更改並 $git add hello.txt 與commit -m 提交。
使用 $git log帶參數可以看到合并情況 關於參數以後再詳細記錄筆記。
$ git log --graph --pretty=oneline --abbrev-commit
3.臨時儲存工作現場
你常常會遇到這樣的情況,你正在自己的分支上做一個新功能,但是有一個BUG需要在一小時內解決。你不可能直接切換到一個新分支來修複bug,這樣你做了大半天的工作就沒了。也不可能在這個分支上修複提交,因為等你新功能寫完還得好久。
輸入 $ git stash save "work in progress for foo feature" (save命令是用於備忘,並非必須)吧 你會發現工作區變成了當前分支上次提交的樣子,這時候你就可以放心的建立分支修複BUG了。
修複之後,你想回到dev繼續工作了!
輸入 $git stash list
下面就會顯示stash的列表,像這樣:[email protected]{0}: WIP on dev: …………
怎麼恢複呢?有兩個辦法:
一是用git stash apply恢複,但是恢複後,stash內容並不刪除,你需要用git stash drop來刪除,
預設是恢複最後一次儲存。如果你多次儲存,想恢複前面儲存的現場。就得根據stash list找到前面的標誌恢複,像這樣
git stash apply [email protected]{1} ;
另一種方式是用$git stash pop,恢複的同時把stash內容也刪了,這種方法只能恢複最後一次stash。
$git stash clear 用於清除stash列表。