隨着公司開發人員的增長,以及多需求的並行開發,功能上線就會礙手礙腳;懼怕本身沒寫完的代碼被別人部署到線上,懼怕別人代碼沒寫完被本身部署到線上;總之功能上線以前還要和全部開發溝通,能不能部署代碼?若是隻是幾我的的團隊倒也無妨,可是開發人員多了,溝通成本就很高了。因而 Git 的分支就發揮它的做用了,本文講解工做中使用 IDEA 進行分支的管理以及合併,以及其餘 Git 使用技巧。git
爲了演示,先用 IDEA 建立一個簡單工程,提交到 git 遠程倉庫當中。
app
如今接到了一個編號爲 100 的需求,咱們在 master 基礎上,建立 dev-100 分支
3d
建立新分支 dev-100的同時,並切換到 dev-100 分支。
code
在 dev-100 分支編寫需求編號爲 100 的 功能,代碼完成後進行 commit
以及 push
(若是這個分支只有你一我的在開發的話,就不用 push
到遠程分支了,只須要 commit
便可)
blog
如今咱們要把 dev-100 分支上的代碼合併到 master 主分支上
先切換到 master 分支
開發
合併 dev-100 分支到 master 分支以前,建議先對 master 代碼進行 pull 更新操做,而後再執行 Merge into Current
部署
若是沒有衝突,dev-100 中的代碼就會被合併到 master 分支上了,合併成功後,須要 push
才能推送到遠程倉庫
源碼
合併完成後,可是因爲一些問題,咱們想要取消本次合併,右鍵 git,選擇 Reset HEAD
it
HEAD^ 是還原到上一個版本,HEAD^^ 是還原到上上一個版本。
Reset Type 有三種:ast
通常使用默認的 mixed 或者粗暴的 hard 方式。
咱們這裏是取消合併,因此選擇 Hard
方式,而且是HEAD^
還原到上一個版本,回退後恢復了原來 master 的代碼。
接下來演示合併衝突,此時是在 master 分支,咱們修改文件,並 commit 以及 push 到遠程倉庫。
此時再把 dev-100 分支合併到 master 分支就會提示衝突。
雙擊衝突文件,處理衝突。
處理完成後,點擊 apply 便可,若是有多個衝突文件,都按照這種方式處理,這是咱們處理完衝突以後的代碼。
dev-100 分支已經被成功合併到 master 了,就能夠刪除了。能夠直接刪除遠程 dev-100 分支,刪除時 IDEA 會提示是否同時刪除本地的 dev-100 分支,勾選便可。
如今咱們把分支合併的結果 push 到遠程倉庫。
編號 100 的需求完成以後,如今咱們又接到一個新的需求,正在 dev-101 分支進行開發,開發還未完成。
忽然線上出現 bug,須要咱們緊急進行修改,因而咱們要基於最新的 master 分支新建一個 bug 分支 bug-12,須要先切換到 master 分支,可是當前分支的代碼沒有commit, 若是直接切換到 master 分支的話,dev-101 分支上的新增代碼就會跑到 master 分支,而代碼又不能此時 commit ,因而就輪到 stash 出場了。
Stash 會保存當前工做進度,會把暫存區和工做區的改動保存起來。
添加備註,選擇 CREATE STASH。你會發現當前工做區內的代碼被恢復成了原樣。
此刻切換到 master 分支,並建立 bug-12 分支進行修復 bug,修復完成後合併到 master 分支並 push 到遠程倉庫,上文已經演示如何合併,在此再也不贅述。
將 bug-12 與 master 合併完成以後,如今要接着寫 dev-101 需求代碼,首先先切換到 dev-101 分支;
可是以前的代碼已經被咱們放到了 git 的 stash 當中,咱們如今要把代碼還原到工做區當中。
選擇 Unstash Changes
選擇以前保存的,同時勾選 Pop stash(還原完成後,會自動刪除這個 stash),肯定後,工做區以前寫的代碼就又回來了。
Stash 利用好了,就能夠自如切換分支,面對突如其來的需求也沒必要煩惱了~