成為Git專家

“time-lapse photography of man standing beside road and bridge during daytime” by Ahsan Avi on Unsplash

我在提交中犯了一個錯誤恨闪,我該如何解決譬正?

我的提交歷史很糟糕,我該如何讓它更整潔杜漠?

如果你有過上述問題俏拱,那么這篇文章適合你暑塑。這篇文章涵蓋了一系列主題,這些主題將使您成為Git專家锅必。

如果您不了解Git基礎(chǔ)知識事格,請單擊此處查看我的Git基礎(chǔ)知識博客。您必須了解Git的基礎(chǔ)知識才能充分利用本文搞隐。

我的提交中犯了一個錯誤驹愚。我該怎么辦?


“broken ceramic plate on floor” by chuttersnap on Unsplash

場景1

假設(shè)您已經(jīng)提交了一堆文件并意識到您輸入的提交說明跟實際上并不清楚×痈伲現(xiàn)在您要更改提交說明逢捺。為此,您可以使用git commit --amend

git commit --amend -m “New commit message”

情景2

假設(shè)您想提交六個文件味廊,但是蒸甜,錯誤地韧衣,您最終只提交了五個文件疑俭。您可能認(rèn)為可以創(chuàng)建新提交并將第6個文件添加到該提交捶码。

這種方法沒有錯浴讯。但是和屎,為了保持一個整潔的提交歷史叹卷,如果你真的能以某種方式將這個文件添加到你之前的提交本身钞支,那不是更好嗎验夯?這也可以通過以下方式完成git commit --amend

git add file6
git commit --amend --no-edit

--no-edit 表示提交說明不會更改。

場景3

無論何時在Git中進行提交憔恳,提交都會附上作者姓名和作者電子郵件瓤荔。通常,當(dāng)您第一次設(shè)置Git時钥组,您需要設(shè)置作者姓名和電子郵件输硝。您無需擔(dān)心每次提交的作者詳細(xì)信息。

也就是說程梦,對于特定項目点把,您可能希望使用不同的電子郵件ID。您需要使用以下命令為該項目配置電子郵件ID:

git config user.email “your email id”

假設(shè)您忘記配置電子郵件屿附,并且已經(jīng)完成了第一次提交郎逃。Amend也可用于更改先前提交的作者⊥Ψ荩可以使用以下命令更改提交的作者:

git commit --amend --author "Author Name <Author Email>"

要點注意

只在本地存儲庫中使用modify命令褒翰。對遠(yuǎn)程存儲庫使用modify可能會造成很多混淆。

我的提交歷史是一團糟匀泊。我該如何處理优训?

假設(shè)您正在處理一段代碼。您知道代碼大約需要十天才能完成探赫。在這十天內(nèi)型宙,其他開發(fā)人員也將提交代碼到遠(yuǎn)程存儲庫。

將本地存儲庫代碼與遠(yuǎn)程存儲庫中的代碼保持同步是一種很好的做法伦吠。這會在您提出拉取請求時避免很多合并沖突。因此魂拦,您決定每兩天從遠(yuǎn)程存儲庫中提取一次更改毛仪。

每次將代碼從遠(yuǎn)程存儲庫提取到本地存儲庫時,都會在本地存儲庫中創(chuàng)建新的合并提交芯勘。這意味著您的本地提交歷史將有大量的合并提交箱靴,這可能會使審閱者感到困惑。

以下是提交歷史記錄在本地存儲庫中的顯示方式荷愕。

如何使提交歷史更整潔衡怀?

這就需要rebase來處理。

什么是rebase安疗?

讓我通過一個例子解釋一下抛杨。


此圖顯示了發(fā)布分支和功能分支中的提交

  1. Release分支有三個提交:Rcommit1,Rcommit2和Rcommit3荐类。
  2. 您只在一次提交時從Release分支創(chuàng)建了Feature分支怖现,即Rcommit1。
  3. 您已向Feature分支添加了兩個提交。它們是Fcommit1和Fcommit2屈嗤。
  4. 您的目標(biāo)是從Release分支到您的Feature分支的提交潘拨。
  5. 你將使用rebase來做到這一點。
  6. 讓Release分支的名稱release 饶号,F(xiàn)eature分支的名稱是feature铁追。
  7. 可以使用以下命令重新進行重新定位:
git checkout feature
git rebase release

Rebasing

在重新定位時,您的目標(biāo)是確保功能分支從Release分支獲取最新代碼茫船。

重新嘗試嘗試逐個添加每個提交琅束,并檢查沖突。這聽起來有點令人困惑嗎透硝?

讓我在圖表的幫助下解釋狰闪。

這顯示了內(nèi)部實際的變革:

步驟1

  1. 運行該命令的那一刻,F(xiàn)eature分支指向Release分支的頭部濒生。
  2. 現(xiàn)在埋泵,F(xiàn)eature分支有三個提交:Rcommit1,Rcommit2和Rcommit3罪治。
  3. 您可能想知道Fcommit1和Fcommit2發(fā)生了什么丽声。
  4. 提交仍然存在,將在下面的步驟中使用觉义。

第2步

  1. 現(xiàn)在Git嘗試將Fcommit1添加到Feature分支雁社。
  2. 如果沒有沖突,則在Rcommit3之后添加Fcommit1
  3. 如果存在沖突晒骇,Git會通知您霉撵,您必須手動解決沖突。解決沖突后洪囤,使用以下命令繼續(xù)重新綁定
git add fixedfile
git rebase --continue

第3步

  1. 一旦添加了Fcommit1徒坡,Git將嘗試添加Fcommit2。
  2. 同樣瘤缩,如果沒有沖突喇完,則在Fcommit1之后添加Fcommit2并且rebase成功。
  3. 如果存在沖突剥啤,Git會通知您锦溪,您必須手動解決。解決沖突后府怯,請使用步驟2中提到的相同命令
  4. 整個rebase完成后刻诊,您會注意到Feature分支有Rcommit1,Rcommit2富腊,Rcommit3坏逢,F(xiàn)commit1和Fcommit2。

注意事項

  1. Rebase和Merge在Git中都很有用。Rebase并不比Merge好是整。
  2. 在合并的情況下肖揣,您將進行合并提交。在rebase的情況下浮入,沒有像合并提交那樣的額外提交龙优。
  3. 一種最佳實踐是在不同點使用命令。使用遠(yuǎn)程存儲庫中的最新代碼更新本地代碼存儲庫時事秀,請使用rebase彤断。在處理pull請求以將Feature分支與Release或Master分支合并時,請使用merge易迹。
  4. 使用Rebase會改變提交歷史記錄(使其更整潔)宰衙。但話雖如此,改變提交歷史存在風(fēng)險睹欲。因此供炼,請確保永遠(yuǎn)不要對遠(yuǎn)程存儲庫中的代碼使用rebase。始終只使用rebase來更改本地倉庫代碼的提交歷史記錄袋哼。
  5. 如果對遠(yuǎn)程存儲庫進行了rebase闸衫,則會產(chǎn)生很多混淆涛贯,因為其他開發(fā)人員無法識別新的歷史記錄蔚出。
  6. 此外弟翘,如果在遠(yuǎn)程存儲庫上完成rebase,則當(dāng)其他開發(fā)人員嘗試從遠(yuǎn)程存儲庫中提取最新代碼時骄酗,它可能會產(chǎn)生問題。所以我再說一遍酥筝,總是只為本地存儲庫使用rebase??

恭喜

你現(xiàn)在是Git專家??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雏门,一起剝皮案震驚了整個濱河市嘿歌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茁影,老刑警劉巖宙帝,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件募闲,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機仍侥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門鸳君,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人或颊,你說我怎么就攤上這事〈烟簦” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵游添,是天一觀的道長弹惦。 經(jīng)常有香客問我,道長棠隐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任啰扛,我火速辦了婚禮嗡贺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诫睬。我一直安慰自己,他們只是感情好摄凡,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布亲澡。 她就那樣靜靜地躺著钦扭,像睡著了一般床绪。 火紅的嫁衣襯著肌膚如雪其弊。 梳的紋絲不亂的頭發(fā)上膀斋,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天梭伐,我揣著相機與錄音,去河邊找鬼籽御。 笑死惰匙,一個胖子當(dāng)著我的面吹牛技掏,可吹牛的內(nèi)容都是我干的项鬼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸠真,長吁一口氣:“原來是場噩夢啊……” “哼龄毡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沦零,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疾渴,沒想到半個月后屯仗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡魁袜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了峰弹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖师幕,靈堂內(nèi)的尸體忽然破棺而出诬滩,到底是詐尸還是另有隱情灭将,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布空镜,位于F島的核電站捌朴,受9級特大地震影響吴攒,放射性物質(zhì)發(fā)生泄漏砂蔽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一镣隶、第九天 我趴在偏房一處隱蔽的房頂上張望诡右。 院中可真熱鬧,春花似錦帆吻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翠肘。三九已至辫秧,卻和暖如春束倍,著一層夾襖步出監(jiān)牢的瞬間盟戏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工邮旷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蝇摸,地道東北人办陷。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓律歼,卻偏偏與公主長得像民镜,于是被迫代替她去往敵國和親险毁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 15分鐘成為 GIT 專家 通過一步一步的實踐來探索 git 內(nèi)部鲸鹦。 Git 可能看起來像一個復(fù)雜的系統(tǒng)问窃。如果上 ...
    唐先僧閱讀 8,144評論 5 25
  • 寫在前面 如果你不能很好的應(yīng)用 Git听皿,那么這里為你提供一個非常棒的 Git 在線練習(xí)工具 Git Online ...
    日拱一兵閱讀 1,421評論 0 11
  • 本文轉(zhuǎn)載自圖靈社區(qū)用戶青年的翻譯文章。 我使用 Git 大約已經(jīng)有18個月時間尉姨,自認(rèn)為能很好地駕馭它了。但是當(dāng)我們...
    圖靈教育閱讀 968評論 1 25
  • 朋友整理的九府,放這里偶爾過來看看 一覆致、基本介紹 首先侄旬,Git作為版本控制系統(tǒng)煌妈,他的原理與SVN為首的集中式版本控制系...
    allenzhan閱讀 1,002評論 0 3
  • 今天蘆一然跟爸爸玩兒的時候,不小心胳膊被弄疼了汰蜘,于是一直哭哭啼啼不停。其實族操,真的是為了在我面前撒嬌而已比被∑捍矗可沒想到我...
    依諾2008閱讀 197評論 0 0