“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ā)布分支和功能分支中的提交
- Release分支有三個提交:Rcommit1,Rcommit2和Rcommit3荐类。
- 您只在一次提交時從Release分支創(chuàng)建了Feature分支怖现,即Rcommit1。
- 您已向Feature分支添加了兩個提交。它們是Fcommit1和Fcommit2屈嗤。
- 您的目標(biāo)是從Release分支到您的Feature分支的提交潘拨。
- 你將使用rebase來做到這一點。
- 讓Release分支的名稱release 饶号,F(xiàn)eature分支的名稱是feature铁追。
- 可以使用以下命令重新進行重新定位:
git checkout feature
git rebase release
Rebasing
在重新定位時,您的目標(biāo)是確保功能分支從Release分支獲取最新代碼茫船。
重新嘗試嘗試逐個添加每個提交琅束,并檢查沖突。這聽起來有點令人困惑嗎透硝?
讓我在圖表的幫助下解釋狰闪。
這顯示了內(nèi)部實際的變革:
步驟1
- 運行該命令的那一刻,F(xiàn)eature分支指向Release分支的頭部濒生。
- 現(xiàn)在埋泵,F(xiàn)eature分支有三個提交:Rcommit1,Rcommit2和Rcommit3罪治。
- 您可能想知道Fcommit1和Fcommit2發(fā)生了什么丽声。
- 提交仍然存在,將在下面的步驟中使用觉义。
第2步
- 現(xiàn)在Git嘗試將Fcommit1添加到Feature分支雁社。
- 如果沒有沖突,則在Rcommit3之后添加Fcommit1
- 如果存在沖突晒骇,Git會通知您霉撵,您必須手動解決沖突。解決沖突后洪囤,使用以下命令繼續(xù)重新綁定
git add fixedfile
git rebase --continue
第3步
- 一旦添加了Fcommit1徒坡,Git將嘗試添加Fcommit2。
- 同樣瘤缩,如果沒有沖突喇完,則在Fcommit1之后添加Fcommit2并且rebase成功。
- 如果存在沖突剥啤,Git會通知您锦溪,您必須手動解決。解決沖突后府怯,請使用步驟2中提到的相同命令
- 整個rebase完成后刻诊,您會注意到Feature分支有Rcommit1,Rcommit2富腊,Rcommit3坏逢,F(xiàn)commit1和Fcommit2。
注意事項
- Rebase和Merge在Git中都很有用。Rebase并不比Merge好是整。
- 在合并的情況下肖揣,您將進行合并提交。在rebase的情況下浮入,沒有像合并提交那樣的額外提交龙优。
- 一種最佳實踐是在不同點使用命令。使用遠(yuǎn)程存儲庫中的最新代碼更新本地代碼存儲庫時事秀,請使用rebase彤断。在處理pull請求以將Feature分支與Release或Master分支合并時,請使用merge易迹。
- 使用Rebase會改變提交歷史記錄(使其更整潔)宰衙。但話雖如此,改變提交歷史存在風(fēng)險睹欲。因此供炼,請確保永遠(yuǎn)不要對遠(yuǎn)程存儲庫中的代碼使用rebase。始終只使用rebase來更改本地倉庫代碼的提交歷史記錄袋哼。
- 如果對遠(yuǎn)程存儲庫進行了rebase闸衫,則會產(chǎn)生很多混淆涛贯,因為其他開發(fā)人員無法識別新的歷史記錄蔚出。
- 此外弟翘,如果在遠(yuǎn)程存儲庫上完成rebase,則當(dāng)其他開發(fā)人員嘗試從遠(yuǎn)程存儲庫中提取最新代碼時骄酗,它可能會產(chǎn)生問題。所以我再說一遍酥筝,總是只為本地存儲庫使用rebase??
恭喜
你現(xiàn)在是Git專家??