git rebase & git merge

雖然以前實(shí)習(xí)的時候用過一段時間git,但對git的很多概念還是一知半解。這不,今天又遇到了問題。
今天同步內(nèi)核代碼的時候,執(zhí)行g(shù)it pull,就出現(xiàn)了問題,提示有沖突不能提交。
我當(dāng)時的反應(yīng)時:what the fuck?我沒有任何本地提交,為什么會有沖突?逗我呢?
于是用搜索引擎找答案。

git pull相當(dāng)于git fetch 加上 git merge FETCH_HEAD.
如果只是更新代碼,應(yīng)該用rebase而不是merge。
那么rebase和merge有什么區(qū)別?可以理解為,merge是把遠(yuǎn)程分支的改動合并到自己的分支上,而rebase是把自己合并到遠(yuǎn)程分支上!
所以,如果只是更新,應(yīng)該:

git pull --rebase

相當(dāng)于:

git fetch
git rebase

這時,如果你的本地沒有任何改動,就相當(dāng)于完全更新了本地的分支。如果你有本地改動,則會重新以遠(yuǎn)程分支為標(biāo)準(zhǔn)重新生成log。
以后要提交patch,也得rebase,這樣才能生成最新的patch。
再引申一下,在內(nèi)核的開發(fā)模式中,所有的更新都是以patch的形式發(fā)郵件給各個分支的維護(hù)人的。對于開發(fā)patch的人來說,應(yīng)該避免所有會commit的操作,因?yàn)槟愕腸ommit沒有任何意義,因?yàn)楦膭硬粫詐ush的形式發(fā)送到主分支上,并且主分支也不接受pulling request!
所以也不要revert,因?yàn)閞evert會生成新的提交。應(yīng)該用reset。
另外今天還了解到,git add有多種用途。其核心是把改動放到暫存區(qū)。
今天還發(fā)現(xiàn)個很不錯的git中文教程,記錄一下:
https://github.com/geeeeeeeeek/git-recipes/wiki

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. GIT命令 git init在本地新建一個repo,進(jìn)入一個項(xiàng)目目錄,執(zhí)行g(shù)it init,會初始化一個re...
    江邊一蓑煙閱讀 888評論 0 0
  • 查看、添加、提交、刪除、找回,重置修改文件 git help # 顯示command的help git sho...
    Swiftor閱讀 2,209評論 0 2
  • prezi鏈接 一、Git介紹 Git是很強(qiáng)很實(shí)用的版本控制工,Git的優(yōu)點(diǎn)是方便使用,輕量級。Git輕量級的原因...
    二次元日系控鏟屎官閱讀 1,736評論 0 1
  • 設(shè)置用戶名郵箱 生成密鑰對 看一下有沒有id_rsa和id_rsa.pub(或者是id_dsa和id_dsa.pu...
    8546ed36e321閱讀 322評論 0 1

友情鏈接更多精彩內(nèi)容