1. git stash
? 經(jīng)過一周的艱苦奮斗乘盖,開發(fā)的feature1終于上線了充包。但是多柑,在周二開發(fā)feature2的時候论衍,測試同學找過來說瑞佩,上周發(fā)布的代碼有一個bug,怎么辦坯台?當前分支還未開發(fā)完成炬丸,如果commit,當前開發(fā)不完整蜒蕾,會污染commit提交信息稠炬。
? 這個時候stash就可以使用了,將當前修改的代碼保存到stash中暫時保存咪啡。
保存當前代碼
git stash: // 直接將代碼保存到stash中
git stash save "message" // 保存到stash的同時酸纲,加解釋(不包含新文件)
git stash save -a "message" // 保存到stash的同時,加解釋(包含新文件)
查看所有的stash
git stash list
取回stash的代碼
git stash pop // 刪除stash的最后一次的存儲瑟匆,并放回工作區(qū)
git stash pop stash@{1} // 刪除stash的指定的存儲,并放回工作區(qū)
git stash apply // 取出stash的最后一次的存儲栽惶,放回工作區(qū)愁溜,但是stash空間還在
git stash apply stash@{1} // 取出stash的指定的存儲,放回工作區(qū)外厂,但是stash空間還在
刪除stash
git stash drop stash@{id} // 刪除指定的stash
git stash clear // 清空所有的stash
從stash創(chuàng)建一個分支
git stash branch branchName stash@{id}
2. git rebase
git fetch: 拉取遠程代碼冕象,但是不會自動merge
git pull: 拉取遠程的代碼,并且合并到當前分支
// 拉取遠程的的代碼汁蝶,并合并到當前分支
git pull = git fetch + git merge
// 拉取遠程的代碼渐扮,衍合到當前分支
git pull --rebase = git fetch + git rebase
上面的衍合是什么意思呢?(git rebase功能1)
A同學 從master分支切出一個feature1開發(fā)分支
B同學完成一次hotfix掖棉,合并到master墓律,master領(lǐng)先于A同學的feature1分支
A同學要同步master的代碼,于是有了 git merge master
合并后的結(jié)果如上圖幔亥,記錄中有一次merge的信息耻讽,但是這樣污染了commit記錄,我們想要一份干凈的commit
我們恢復(fù)到git merge master
之前的展示帕棉。
使用git rebase master
针肥,如下圖展示
通過上圖,可以看到香伴,merge的commit沒有了慰枕,這樣減少了一次無意義的merge的commit信息,簡化了commit提交記錄即纲。
但是可能會出現(xiàn)問題:
B同學修復(fù)的代碼和A開發(fā)的代碼沒有沖突具帮,則無事,但是一旦B同學修復(fù)的代碼和A開發(fā)的代碼沖突了,怎么辦匕坯?
解決方法:如果沖突束昵,git rebase
會停止合并,讓你去解決沖突葛峻,沖突解決完成锹雏,執(zhí)行git rebase --continue
即可繼續(xù)。-
git rebase
的流程是什么术奖?- Git 會把
feature1
的commit
取消礁遵,并保存到臨時的patch
文件,存在.git/rebase
目錄下 - 把
feature1
更新到最新的master
分支上 - 將上面的
patch
應(yīng)用到feature1
分支上采记,有沖突則解決沖突
- Git 會把
git rebase功能2:
? Git鼓勵頻繁commit佣耐,這樣可以保留開發(fā)記錄,保證代碼不丟失唧龄,方便回歸或者自己回顧開發(fā)過程兼砖。但是頻繁的commit又不利于 code review
,于是我們需要將多個commit合并到一起既棺。
-
git log
查看日志
-
git rebase -i HEAD~3
:合并最近的3次提交
- pick:保留提交記錄讽挟,squash:合并提交記錄(其他參數(shù)可以自查)
- 保存之后,查看提交記錄丸冕,確認是否修改commit的message(推薦使用3次的并集)
-
git log
查看此前3次提交已經(jīng)合并到一起
上述是合并最近3次的提交耽梅,如果要合并歷史中的某N次提交
git rebase -i [commitId]
注意:上面的commitId是不包含在內(nèi),如果需要合并N次提交胖烛,此處的commitID應(yīng)該是N+1的commitID眼姐。
3. 取別名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
注明:
- 本篇文章借鑒了 徹底搞懂 Git-Rebase