FAQ
這個(gè)地方翰绊,我會(huì)記錄我在使用git或github中遇到的一些問(wèn)題茵烈。
1. 在git bash 中如何退出vim編輯器定拟?
2017/1/18
問(wèn)題描述:
在使用git commit
git merge --no-ff xxx
等指令時(shí)會(huì)跳轉(zhuǎn)到一個(gè)“編輯器”(vim編輯器)锣吼,然后我發(fā)現(xiàn)我沒(méi)法編輯得湘,也不知道怎么退出杖玲,今晚(2017/1/18 20:54:21 )搞清楚了這個(gè)問(wèn)題。
問(wèn)題解答:
其實(shí)按 o i a 都可以進(jìn)入編輯模式淘正,接下來(lái)你可以對(duì)內(nèi)容進(jìn)行修改摆马,修改好后
方法一:按住Esc再按兩下大寫(xiě)Z (注意是大寫(xiě)) 就可以退出了,這種情況下是保存并退出鸿吆。
方法二:按Esc退出編輯模式囤采,如果想退出編輯器,按Shift+惩淳;(其實(shí)就是輸入個(gè) “:" 冒號(hào) ) 蕉毯,接下來(lái)可輸入q!(不保存并退出)或 wq!(保存并退出)思犁。
以上兩種方法都親測(cè)有效代虾。
嗯 就是這樣。
2.git merge --no-ff 是什么意思激蹲?與git merge有什么區(qū)別棉磨?與 git merge --squash 有什么區(qū)別?
2017/1/18
問(wèn)題描述:
之前因?yàn)橛龅缴弦活}的緣故学辱,我在合并的時(shí)候一直用git merge
于是在看graph的時(shí)候 發(fā)現(xiàn)和我想象中的不一樣乘瓤,分支去哪了?
問(wèn)題解答:
--no-ff
指的是強(qiáng)行關(guān)閉fast-forward方式策泣。
fast-forward就是直接使用git merge
的方式衙傀,當(dāng)條件允許的時(shí)候,git直接把HEAD指針指向合并分支的頭萨咕,完成合并统抬。屬于“快進(jìn)方式”,不過(guò)這種情況如果刪除分支危队,則會(huì)丟失分支信息蓄喇。因?yàn)樵谶@個(gè)過(guò)程中沒(méi)有創(chuàng)建commit
git merge --squash
是用來(lái)把一些不必要commit進(jìn)行壓縮,比如說(shuō)交掏,你的feature在開(kāi)發(fā)的時(shí)候?qū)懙腸ommit很亂妆偏,那么我們合并的時(shí)候不希望把這些歷史commit帶過(guò)來(lái),于是使用--squash
進(jìn)行合并盅弛,此時(shí)文件已經(jīng)同合并后一樣了钱骂,但不移動(dòng)HEAD叔锐,不提交。需要進(jìn)行一次額外的commit來(lái)“總結(jié)”一下见秽,然后完成最終的合并愉烙。
總結(jié):
--no-ff
:不使用fast-forward方式合并,保留分支的commit歷史
--squash
:使用squash方式合并解取,把多次分支commit歷史壓縮為一次
看下圖就很明白了
本題解答參考 segmentfault