在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

開發人員在使用Git時幾種常見錯誤

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-11-08 09:17 ? 次閱讀

無論是數據科學家、算法工程師還是普通開發人員,在每個團隊協作開發任務中,Git都是必不可少的版本控制工具,因此掌握它的基本操作十分有必要。但即便是教程滿天飛的今天,開發人員在使用Git時也還是會犯一些不應該犯的錯誤。本文總結了其中的幾種常見錯誤,希望能對新手有所幫助。

force push

有時,我們會需要用force push把commit推送到遠端倉庫。

假設有2名開發人員正在合作開發一個分支

之前開發人員1已經完成更改,把代碼push到了遠程倉庫

現在,開發人員2也完成了更改,正當他準備提交時,他卻發現自己無法將代碼推送到遠程倉庫

由于開發人員2是個初學者,他Google了一下,發現了一個神奇的命令git push -f,于是進行了強制push

之后開發人員1在檢查遠程倉庫時,發現自己編寫的代碼全消失了

出現這個問題的原因是force push會覆蓋遠程倉庫中的代碼,使現有代碼全部丟失。

如果開發人員2想避免這個問題,一種理想方法是他先把開發人員1的更新從遠程倉庫pull到本地,然后把自己的代碼rebase一下,再進行push。這里我們討論的是在同一分支中從遠程到本地倉庫的rebase。

git push -f這個命令非常不安全,除非有絕對的必要,大家最好還是不要用它。它會把本地分支的提交覆蓋遠程推送分支的提交,給協作的同伴帶去不少麻煩,即便是上面的解決方案,它也可能存在一個時間差的問題,因為你不可能時刻掌握同伴的工作進展。

所以如果大家都用正確的git工作流,讓每個開發人員都擁有自己的功能分支,這種情況根本不會發生。

Rebase

如果你想把一個分支的修改合并到當前分支,你可以用git rebase。它和git merge的區別是merge有一個合并commit的步驟,而rebase是把所有commit都串聯在一起,讓你本地的分支歷史看起來像沒有經過任何合并一樣。

假設有2名開發人員正在合作開發一個功能分支

開發人員1率先完成了一系列commit,并將其推送到遠程功能分支

之后,開發人員2把遠程功能分支的最新更改pull到本地

開發人員2向本地功能分支添加了一堆commit

這時,他想把本地倉庫的更新重新rebase到遠程倉庫中,于是他把整個預發分支(release branch)在本地功能分支上rebase了一下。這里我們討論的是在不同分支中從遠程到本地倉庫的rebase

現在,開發人員2試著把代碼push到遠程功能分支上,由于提交歷史記錄已更改,這個操作不被允許,他只能又開始用git push -f

最后,當開發人員1想從遠程倉庫提取最新代碼時,由于提交記錄已更改,他被迫需要處理大量代碼沖突問題

常規rebase

開發人員2的操作

如上圖所示,rebase遠程倉庫會改變提交歷史記錄,并在其他開發人員嘗試從遠程倉庫中提取最新代碼時產生問題。處理這種情況的理想方法是始終只rebase本地倉庫,本地倉庫中的任何commit都不應該被push到遠程倉庫。

如果別人事先已經把commit推送到遠程功能分支,那么你最好先用pull命令把更新拉到本地,用merge和你的修改合并,因為merge不會改變提交歷史,而rebase會。

此外,和上個問題一樣,如果使用正確的git工作流,每個開發人員都會有自己的功能分支,這時,開發者在自己的功能分支上進行更新并且在遠程功能分支上做rebase是不會報錯的,因為沒有其他開發人員從同一個遠程功能分支中提取代碼。無論如何,盡量避免重新定義遠程倉庫。

Rebase是一個非常強大的功能,使用時也需謹慎。

amend

git amend命令的作用是修復最近一次commit,讓你合并你緩存區的修改和上一次commit,而不是提交一個新的快照。這里需要注意一點,它不是修改最近一次commit,而是整個替換掉原commit,所以對Git來說這是一個新的commit。此外,它還可以用來編輯上一次的commit描述。

假設有2名開發人員正在合作開發一個功能分支

開發人員1率先完成了commit,并將其推送到遠程功能分支,我們把它稱為“old commit”

之后,開發人員2把最新代碼從遠程功能分支pull到本地功能分支

然后他開始處理本地倉庫中的代碼,在這個過程中,他沒有向遠程倉庫push任何commit

這時開發人員1突然發現之前的commit中存在bug,他用amend命令修復了本地倉庫里的最近一次commit,我們把它稱為“new commit”

開發人員1嘗試把這個新commit重新push到遠程功能分支,由于提交歷史記錄發生了變化,這個操作報錯了,于是他調用了git push -f

現在,當開發人員2想從遠程功能分支中提取最新代碼時,git會注意到提交歷史記錄的變化并創建合并的commit。因此當他pull到本地后,他會在本地倉庫里發現“commit old”和“commit new”,這就破壞了amend這個操作的意義。

最后,即便開發人員2從遠程分支到本地分支執行rebase,這個“commit old”還是會出現在本地倉庫中,它仍然會作為歷史提交的一部分。

amend commit會更改提交歷史記錄,所以當其他開發人員嘗試從遠程倉庫提取最新代碼時,修改遠程倉庫中的commit會產生混淆。

為了避免這個錯誤,最好的方法是只在本地倉庫里修改commit,不要對遠程庫里的commit做任何修改。當然,一人一個分支也不會出現這個問題。

Hard reset

git reset命令是用來將當前branch重置到另外一個commit的。它不會產生commit,而是只更新一個branch(branch本身就是一個指向一個commit的指針)指向另外一個commit。

Hard reset的命令是git reset --hard

此外,git reset還有--soft和--mixed,只不過它們都沒有Hard reset那么不安全

假設開發人員1正在開發一個功能分支,并在本地倉庫中完成了5次commit

與此同時,他還正在處理尚未提交的兩個文件

這時,如果他運行了git reset --hard

那么功能分支中的最新commit會變成是commit4,commit5丟失

同時他正在處理的那兩個未提交文件也會丟失

這時commit5還在git內部,只不過對它的引用丟失了,我們可以用git reflog把它恢復,但總體來說,hard reset還是很不安全。在git中使用reset命令時要非常小心,如果必須得用,確保你已經完全評估所有情況。

小結

綜上所述,為了避免使用git時出錯,我們可以牢記這幾條教訓:

避免多人在同一分支上協作。上述四個例子中有三個都是在說明這個問題,在日常工作中,遵守正確的工作流非常重要,要確保只有一個人在一個功能分支上工作,這是技術主管、高級開發人員尤其需要注意的。

不要到處實用force push。

如果萬不得已必須使用force push,先評估其他方案,把它作為最后的手段。

不要試圖修改遠程倉庫里的commit,要只在本地倉庫中更改commit歷史記錄。但即便是在本地倉庫里,用rebase還是要謹慎。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69058
  • Git
    Git
    +關注

    關注

    0

    文章

    201

    瀏覽量

    15821

原文標題:實用:Git中的一些常見錯誤

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于FPGA的單線聚合(SWA)——適用于FPGA開發人員和非FPGA開發人員

    擁有FPGA設計經驗的開發者還能自定義該解決方案。即便沒有FPGA設計經驗,開發人員依然能夠輕松快速完成部署。
    發表于 10-21 10:17 ?1834次閱讀
    基于FPGA的單線聚合(SWA)——適用于FPGA<b class='flag-5'>開發人員</b>和非FPGA<b class='flag-5'>開發人員</b>

    RemoTI基本遠程開發人員指南

    `RemoTI基本遠程開發人員指南目錄`
    發表于 03-16 16:28

    高價尋找matlab快速開發人員

    高價尋找matlab快速開發人員
    發表于 04-04 15:38

    TS-5400開發人員培訓

    TS-5400開發人員培訓
    發表于 10-09 08:54

    開發人員看的視頻

    英特爾?軟件頻道旨在通過向開發人員提供示例,教程,提示,技巧以及如何將開發人員與影響者,創新者聯系起來,幫助他們。
    的頭像 發表于 11-01 06:26 ?2431次閱讀

    什么是英特爾開發人員專區

    什么是英特爾?開發人員專區? 觀看此視頻,了解正在使用工具和資源滿足編碼需求的軟件開發人員
    的頭像 發表于 11-12 06:55 ?2541次閱讀

    WebVR:開發人員使用的資源介紹

    這是WebVR系列的最后一集。 在這里,我們將向您介紹一些可供開發人員和愛好者使用的資源。
    的頭像 發表于 11-12 06:05 ?1941次閱讀

    英特爾開發人員專區:Android開發

    Android *英特爾?開發人員專區
    的頭像 發表于 05-31 09:37 ?2962次閱讀

    Intel開發人員專區

    Intel?開發人員專區
    的頭像 發表于 05-31 09:24 ?1654次閱讀

    開發人員的應用程序和網絡安全

    Whitehat Security研究發現,大多數開發人員都將安全性視為編碼和開發過程的組成部分,但是該行為卻缺乏來自安全專家的支持。 據悉,WhiteHat Security本周四發布了一份報告
    的頭像 發表于 11-22 11:01 ?3309次閱讀

    物聯網參考設計開發人員如何縮短設計周期

    滿足對速度的需求Ignion的開發環境也有助于物聯網參考設計人員開發人員和最終的制造商縮短其設計周期。借助于Ignion的技術,從數千種潛在可用的、彼此不同的天線中找到合適選項的過程,被縮減到從
    的頭像 發表于 11-01 10:14 ?2364次閱讀

    IoT 開發人員必須考慮設計和安全性

    IoT 開發人員必須考慮設計和安全性
    的頭像 發表于 01-03 09:45 ?555次閱讀

    IzoT BACnet 開發人員指南

    IzoT BACnet 開發人員指南
    發表于 03-13 19:31 ?1次下載
    IzoT BACnet <b class='flag-5'>開發人員</b>指南

    IzoT BACnet 開發人員指南

    IzoT BACnet 開發人員指南
    發表于 07-04 20:48 ?0次下載
    IzoT BACnet <b class='flag-5'>開發人員</b>指南

    MSPDebugStack開發人員指南

    電子發燒友網站提供《MSPDebugStack開發人員指南.pdf》資料免費下載
    發表于 12-05 14:49 ?0次下載
    MSPDebugStack<b class='flag-5'>開發人員</b>指南
    主站蜘蛛池模板: 狠狠插综合网 | 天天综合在线观看 | 四虎午夜影院 | hd性欧美 | 五月天婷婷丁香中文在线观看 | 手机在线小视频 | 日本三级免费 | 亚洲区 | 天天干影院| 黄网站视频观看免费 | 伦理片日本韩国电影三级在线观看 | 国产成都一二三四区 | 天天摸夜夜爽 | 亚洲影院手机版777点击进入影院 | 国产综合图区 | 国产一区二区影院 | 一区二区三区中文字幕 | 国产又色又爽又黄的网站在线一级 | 国模吧一区二区三区精品视频 | av72成人 | 日韩免费观看一级毛片看看 | 天天操夜夜操视频 | 欧美日本不卡 | 午夜啪啪网站 | 美女写真福利视频 | 奇米99| 性殴美高清视频 | 欧洲妇女成人淫片aaa视频 | 伊人一区二区三区 | 婷婷丁香视频 | 国产操女人 | 国产激烈床戏无遮挡观看 | 欧美69xx性欧美| 欧美日韩在线成人免费 | 久久精品波多野结衣 | 91福利社在线观看 | 午夜噜噜噜私人影院在线播放 | a在线观看网站 | 国产精品亚洲一区二区三区在线播放 | 日本成人免费在线视频 | 台湾一级毛片 |