1.關于git分支
git的“分支”乍一聽是一個特別容易讓人產生錯覺的概念,以為它和樹枝一樣是分叉的枝節,其實Git中的分支本質上是個指向commit對象的指針,每次commit,git都把它們串成一條時間線,這條時間線就是一個分支。
2.直接切換分支的兩種結果
一般我們在切換分支前,最好先提交commit(或者儲藏stash)下在當前分支的修改。 多數情況我們沒有提交(或者儲藏)當前分支的修改是切換不了分支的,也有一些特殊情況下不提交修改依然可以成功切換分支。
當分支a和分支b在同一提交點時,(可能是剛互相合并完成也可能是a分支是基于b分支的當前提交點新建的),即使在某一個分支下修改了內容(修改文件、創建文件、刪除文件)后不提交依然能成功切換分支(剛剛修改的內容會被帶到新切換到的分支),于此同時git會提示:
bogon:weddingH5 jj$ git checkout a
D css/index.css(被刪除的文件)
M index.html(被修改的文件)
Switched to branch 'a'
復制代碼
此時你可以在隨意切換a和b分支,并可選擇在a和b任一分支上提交現在的修改。
否則會切換分支失敗,與此同時git會提示:
error: Your local changes to the following files would be overwritten by checkout:index.html(你修改的文件)
Please commit your changes or stash them before you switch branches.
復制代碼
3.切換分支先提交commit
4.切換分支前先儲藏stash
使用git的時候,我們往往使用branch解決任務切換問題,例如,我們往往會建一個自己的分支去修改和調試代碼, 如果別人或者自己發現原有的分支上有個不得不修改的bug,我們往往會把完成一半的代碼 commit提交到本地倉庫,然后切換分支去修改bug,改好之后再切換回來。這樣的話往往log上會有大量不必要的記錄。其實如果我們不想提交完成一半或者不完善的代碼,但是卻不得不去修改一個緊急Bug,那么使用’git stash’就可以將你當前未提交到本地(和服務器)的代碼推入到Git的棧中,這時候你的工作區間和上一次提交的內容是完全一樣的,所以你可以放心的修 Bug,等到修完Bug,提交到服務器上后,再使用’git stash apply’將以前一半的工作應用回來。當你多次使用’git stash’命令后,你的棧里將充滿了未提交的代碼,這時候你會對將哪個版本應用回來有些困惑,’git stash list’命令可以將當前的Git棧信息打印出來,你只需要將找到對應的版本號,例如使用’git stash apply stash@{1}’就可以將你指定版本號為stash@{1}的工作取出來,當你將所有的棧都應用回來的時候,可以使用’git stash clear’來將棧清空。
介紹地址
需要提醒的是,你可以在某一分支上儲藏,然后在任一分支上應用這些儲藏。git stash apply會默認應用當前儲藏列表(用git stash list查看)中最新的儲藏,要想指定應用某一儲藏,可以用類似git stash apply stash@{2} 這樣的命令。
5.什么時候會出現合并沖突
廖雪峰老師的網站地址 當兩個分支出現下圖這種情況時,合并兩個分支可能會發生沖突
如何解決沖突? 只能手動解決沖突,如果涉及到其他開發者,最好和其他開發者當面商量后一起解決。
6. git tag
6.1 git tag是什么
tag , 翻譯過來是標簽的意思,顧名思義,標簽是為了標記某種事物。 tag 是 Git 版本庫的一個快照,指向某個 commit 的指針。
6.2 使用git tag的好處
tag 的存在,是因為我們需要這種標記的功能。目前的項目開發中,當發布版本時 tag 就派上用場了。例如 v1.0.1,v1.0.2… 另外,git 提供了 tag 的增刪改查一系列操作,在 tag 的使用上,可謂非常之方便。
6.3 tag 和 branch 的區別以及使用場景
想到這里,你可能覺得 tag 和 branch 有點相似。沒錯,的確是有點像,但是它們的職責分工和本質都是不同的。 **tag 對應某次 commit, 是一個點,是不可移動的。 ** branch 對應一系列 commit,是很多commit點連成的一根時間線。
所以,兩者的區別決定了使用方式,改動代碼用 branch ,不改動只查看用 tag。
tag 和 branch 的相互配合使用,有時候起到非常方便的效果,例如 已經發布了 v1.0 v2.0 v3.0 三個版本,這個時候,我突然想不改現有代碼的前提下,在 v2.0 的基礎上加個新功能,作為 v4.0 發布。就可以 檢出 v2.0 的代碼作為一個 branch ,然后作為開發分支。