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

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

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

3天內不再提示

常用git命令的工作過程,包你過目不忘

電子工程技術 ? 來源:機器之心 ? 2020-06-08 16:29 ? 次閱讀

git merge、git rebase、git reset、git revert、git fetch、git pull、git reflog……你知道這些 git 命令執行的究竟是什么任務嗎?如果你還有些分不清楚,那千萬不能錯過這篇文章。在本文中,熟知 JavaScript、TypeScript、GraphQL、Serverless、AWS、Docker 和 Golang 的 21 歲年輕軟件顧問 Lydia Hallie 通過動圖形式直觀地介紹了這些常用 git 命令的工作過程,包你過目不忘。

盡管 Git 是一款非常強大的工具,但如果我說 Git 用起來簡直是噩夢,大多數人也會認同我的說法。我發現在使用 Git 時,在頭腦里可視化地想象它會非常有用:當我執行一個特定命令時,這些分支會如何交互,又會怎樣影響歷史記錄?為什么當我在 master 上執行硬重啟,force push 到原分支以及 rimraf 我們的 .git 文件夾時,我的同事哭了?

我覺得創建一些最常用且最有用的 Git 命令的可視化示例會是一個完美的用例!下面我將介紹的很多命令都有可選參數——你可以使用這些參數來改變對應命令的行為。而我的示例只會涵蓋命令的默認行為,而不會添加(或添加太多)可選配置!

合并

擁有多個分支是很方便的,這樣可以將不同的新修改互相隔離開,而且還能確保你不會意外地向生產代碼推送未經許可或破損的代碼修改。但一旦這些修改得到了批準許可,我們就需要將其部署到我們的生產分支中!

可將一個分支的修改融入到另一個分支的一種方式是執行 git merge。Git 可執行兩種類型的合并:fast-forward 和 no-fast-forward。現在你可能分不清,但我們馬上就來看看它們的差異所在。

Fast-forward (—ff)

在當前分支相比于我們要合并的分支沒有額外的提交(commit)時,可以執行 fast-forward 合并。Git 很懶,首先會嘗試執行最簡單的選項:fast-forward!這類合并不會創建新的提交,而是會將我們正在合并的分支上的提交直接合并到當前分支。

完美!現在,我們在 dev 分支上所做的所有改變都合并到了 master 分支上。那么 no-fast-forward 又是什么意思呢?

No-fast-foward (—no-ff)

如果你的當前分支相比于你想要合并的分支沒有任何提交,那當然很好,但很遺憾現實情況很少如此!如果我們在當前分支上提交我們想要合并的分支不具備的改變,那么 git 將會執行 no-fast-forward 合并。

使用 no-fast-forward 合并時,Git 會在當前活動分支上創建新的 merging commit。這個提交的父提交(parent commit)即指向這個活動分支,也指向我們想要合并的分支!

沒什么大不了的,完美的合并!現在,我們在 dev 分支上所做的所有改變都合并到了 master 分支上。

合并沖突

盡管 Git 能夠很好地決定如何合并分支以及如何向文件添加修改,但它并不總是能完全自己做決定。當我們想要合并的兩個分支的同一文件中的同一行代碼上有不同的修改,或者一個分支刪除了一個文件而另一個分支修改了這個文件時,Git 就不知道如何取舍了。

在這樣的情況下,Git 會詢問你想要保留哪種選擇?假設在這兩個分支中,我們都編輯了 README.md 的第一行。

如果我們想把 dev 合并到 master,就會出現一個合并沖突:你想要標題是 Hello! 還是 Hey!?

當嘗試合并這些分支時,Git 會向你展示沖突出現的位置。我們可以手動移除我們不想保留的修改,保存這些修改,再次添加這個已修改的文件,然后提交這些修改。

完成!盡管合并沖突往往很讓人厭煩,但這是合理的:Git 不應該瞎猜我們想要保留哪些修改。

變基(Rebasing)

我們剛看到可通過執行 git merge 將一個分支的修改應用到另一個分支。另一種可將一個分支的修改融入到另一個分支的方式是執行 git rebase。

git rebase 會將當前分支的提交復制到指定的分支之上。

完美,現在我們在 dev 分支上獲取了 master 分支上的所有修改。

變基與合并有一個重大的區別:Git 不會嘗試確定要保留或不保留哪些文件。我們執行 rebase 的分支總是含有我們想要保留的最新近的修改!這樣我們不會遇到任何合并沖突,而且可以保留一個漂亮的、線性的 Git 歷史記錄。

上面這個例子展示了在 master 分支上的變基。但是,在更大型的項目中,你通常不需要這樣的操作。git rebase 在為復制的提交創建新的 hash 時會修改項目的歷史記錄。

如果你在開發一個 feature 分支并且 master 分支已經更新過,那么變基就很好用。你可以在你的分支上獲取所有更新,這能防止未來出現合并沖突。

交互式變基(Interactive Rebase)

在為提交執行變基之前,我們可以修改它們!我們可以使用交互式變基來完成這一任務。交互式變基在你當前開發的分支上以及想要修改某些提交時會很有用。


在我們正在 rebase 的提交上,我們可以執行以下 6 個動作:

reword:修改提交信息;

edit:修改此提交;

squash:將提交融合到前一個提交中;

fixup:將提交融合到前一個提交中,不保留該提交的日志消息;

exec:在每個提交上運行我們想要 rebase 的命令;

drop:移除該提交。

很棒!這樣我們就能完全控制我們的提交了。如果你想要移除一個提交,只需 drop 即可。

如果你想把多個提交融合到一起以便得到清晰的提交歷史,那也沒有問題!

交互式變基能為你在 rebase 時提供大量控制,甚至可以控制當前的活動分支。 重置(Resetting)
當我們不想要之前提交的修改時,就會用到這個命令。也許這是一個 WIP 提交或者可能是引入了 bug 的提交,這時候就要執行 git reset。

git reset 能讓我們不再使用當前臺面上的文件,讓我們可以控制 HEAD 應該指向的位置。

軟重置

軟重置會將 HEAD 移至指定的提交(或與 HEAD 相比的提交的索引),而不會移除該提交之后加入的修改!

假設我們不想保留添加了一個 style.css 文件的提交 9e78i,而且我們也不想保留添加了一個 index.js 文件的提交 035cc。但是,我們確實又想要保留新添加的 style.css 和 index.js 文件!這是軟重置的一個完美用例。

輸入 git status 后,你會看到我們仍然可以訪問在之前的提交上做過的所有修改。這很好,這意味著我們可以修復這些文件的內容,之后再重新提交它們! 硬重置

有時候我們并不想保留特定提交引入的修改。不同于軟重置,我們應該再也無需訪問它們。Git 應該直接將整體狀態直接重置到特定提交之前的狀態:這甚至包括你在工作目錄中和暫存文件上的修改。

Git 丟棄了 9e78i 和 035cc 引入的修改,并將狀態重置到了 ec5be 的狀態。 還原(Reverting) 另一種撤銷修改的方法是執行 git revert。通過對特定的提交執行還原操作,我們會創建一個包含已還原修改的新提交。

假設 ec5be 添加了一個 index.js 文件。但之后我們發現其實我們再也不需要由這個提交引入的修改了。那就還原 ec5be 提交吧!

完美!提交 9e78i 還原了由提交 ec5be 引入的修改。在撤銷特定的提交時,git revert 非常有用,同時也不會修改分支的歷史。 揀選(Cherry-picking) 當一個特定分支包含我們的活動分支需要的某個提交時,我們對那個提交執行 cherry-pick!對一個提交執行 cherry-pick 時,我們會在活動分支上創建一個新的提交,其中包含由揀選出來的提交所引入的修改。 假設 dev 分支上的提交 76d12 為 index.js 文件添加了一項修改,而我們希望將其整合到 master 分支中。我們并不想要整個 dev 分支,而只需要這個提交!

現在 master 分支包含 76d12 引入的修改了。 取回(Fetching) 如果你有一個遠程 Git 分支,比如在 GitHub 上的分支,當遠程分支上包含當前分支沒有的提交時,可以使用取回。比如當合并了另一個分支或你的同事推送了一個快速修復時。

通過在這個遠程分支上執行 git fetch,我們就可在本地獲取這些修改。這不會以任何方式影響你的本地分支:fetch 只是單純地下載新的數據而已。

現在我們可以看到自上次推送以來的所有修改了。這些新數據也已經在本地了,我們可以決定用這些新數據做什么了。 拉?。≒ulling) 盡管 git fetch 可用于獲取某個分支的遠程信息,但我們也可以執行 git pull。git pull 實際上是兩個命令合成了一個:git fetch 和 git merge。當我們從來源拉取修改時,我們首先是像 git fetch 那樣取回所有數據,然后最新的修改會自動合并到本地分支中。

很好,我們現在與遠程分支完美同步了,并且也有了所有最新的修改! Reflog 每個人都會犯錯,但犯錯其實沒啥!有時候你可能感覺你把 git repo 完全搞壞了,讓你想完全刪了了事。

git reflog 是一個非常有用的命令,可以展示已經執行過的所有動作的日志。包括合并、重置、還原,基本上包含你對你的分支所做的任何修改。

如果你犯了錯,你可以根據 reflog 提供的信息通過重置 HEAD 來輕松地重做!

假設我們實際上并不需要合并原有分支。當我們執行 git reflog 命令時,我們可以看到這個 repo 的狀態在合并前位于 HEAD@{1}。那我們就執行一次 git reset,將 HEAD 重新指向在 HEAD@{1} 的位置。

我們可以看到最新的動作已被推送給 reflog。

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

    關注

    5

    文章

    684

    瀏覽量

    22027
  • Git
    Git
    +關注

    關注

    0

    文章

    199

    瀏覽量

    15765

原文標題:這位小姐姐用動圖展示了10個Git命令,看完過目不忘!

文章出處:【微信號:EngicoolArabic,微信公眾號:電子工程技術】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    詳解kubectl常用命令

    詳解kubectl常用命令
    的頭像 發表于 11-05 15:39 ?241次閱讀
    詳解kubectl<b class='flag-5'>常用命令</b>

    極化整流器的作用和工作過程

    極化整流器作為電化學整流系統的重要組成部分,在電解槽的保護和穩定運行中發揮著關鍵作用。本文將詳細闡述極化整流器的定義、作用、工作過程以及其在電解槽中的應用。
    的頭像 發表于 10-11 10:27 ?623次閱讀

    可調電源電路穩壓工作過程是什么

    可調電源電路是一種電子設備,它可以提供可調節的電壓和電流輸出,廣泛應用于電子實驗、設備測試和維修等領域。穩壓工作過程是可調電源電路的核心功能之一,它確保輸出電壓在負載變化或輸入電壓波動時保持穩定
    的頭像 發表于 10-09 17:12 ?338次閱讀

    SD的命令和響應

    一個完整的?SD?卡操作過程是:主機(單片機等)發起“命令”,SD?卡根據命令的內容決定是 否發送響應信息及數據等,如果是數據讀/寫操作,主機還需要發送停止讀/寫數據的命令來結束 本次
    的頭像 發表于 10-08 15:49 ?475次閱讀
    SD的<b class='flag-5'>命令</b>和響應

    只讀存儲器的基本結構和工作過程

    只讀存儲器(Read-Only Memory,ROM)是一種重要的計算機存儲設備,它以非破壞性讀出方式工作,即只能讀出存儲的信息而無法直接寫入新的信息。這種特性使得ROM在存儲固定程序和數據方面具有獨特的優勢。下面將詳細闡述只讀存儲器的基本結構、工作過程以及相關的技術細節
    的頭像 發表于 09-05 10:43 ?997次閱讀

    簡述DMA控制器的工作過程

    DMA(Direct Memory Access)控制器的工作過程是一個復雜但高效的硬件執行過程,它實現了內存與外設之間直接的數據傳輸,顯著減輕了CPU的負擔,提高了數據處理的效率。
    的頭像 發表于 08-20 10:35 ?1057次閱讀

    反饋控制的工作過程和特點

    對被控對象的精確控制。本文將詳細闡述反饋控制的基本原理,包括其定義、特點、工作過程、類型以及在工業自動化中的應用等方面。
    的頭像 發表于 06-17 11:48 ?1408次閱讀

    PLC移位寄存器指令的工作過程

    指令系統中非常重要的一類,它在順序控制、物流及數據流控制等場合應用廣泛。本文將詳細講解PLC移位寄存器指令的工作原理、指令格式、工作過程以及應用場景,以期為工程師和技術人員提供參考。
    的頭像 發表于 06-15 17:37 ?1785次閱讀

    電氣設備的組成和工作過程

    電氣設備是現代工業、民用和基礎設施建設中不可或缺的組成部分。它們廣泛應用于發電、輸電、變電、配電、用電等各個環節。本文將詳細介紹電氣設備的組成和工作過程。 一、電氣設備的組成 電氣設備主要包括以下
    的頭像 發表于 06-06 09:27 ?2143次閱讀

    ADC的SNR指標 ADC的工作過程介紹

    以前的文章有講過有講到,ADC的工作過程,可以看成采樣和量化兩個步驟。
    的頭像 發表于 05-28 18:18 ?1516次閱讀
    ADC的SNR指標 ADC的<b class='flag-5'>工作過程</b>介紹

    音箱制作過程圖解

    電子發燒友網站提供《音箱制作過程圖解.doc》資料免費下載
    發表于 04-28 09:27 ?10次下載

    Linux常用網絡命令介紹

    默認使用該命令會一直發送ICMP直到用戶手動中止,可以使用-c命令指定發送數據的個數,使用-W指定最長等待時間,如果有多張網卡,還可以通過-I指定發送
    發表于 03-25 14:45 ?468次閱讀
    Linux<b class='flag-5'>常用</b>網絡<b class='flag-5'>命令</b>介紹

    電路板pcb制作過程

    電路板pcb制作過程
    的頭像 發表于 03-05 10:26 ?1256次閱讀

    光纖傳輸信息時的工作過程

    光電轉換工作過程如下: 變頻器主控芯片將驅動IGBT開關的信息由電信號信號轉換成光信號,請問這個轉換過程是通過什么電路完成的,而且傳輸驅動信息時是同一相的上下橋臂同時發送的,在發送端是怎么組合驅動
    發表于 02-03 11:33

    藍牙 | 軟件:Git管理高通的ChipCode項目

    最近發現大家在高通chipcode網站上下載不了代碼,小編一直使用git的方式獲取新版本代碼,沒有遇到什么阻礙。于是小編到新主機上嘗試下載代碼的壓縮git代碼,都遇到了問題。由于壓縮
    的頭像 發表于 01-26 08:29 ?402次閱讀
    藍牙 | 軟件:<b class='flag-5'>Git</b>管理高通的ChipCode項目
    主站蜘蛛池模板: 韩国三级中文| 天天澡天天摸天天爽免费| 天天操网| 黄色在线| 四虎永久地址4hu紧急入口| 国产一区精品视频| 加勒比一到三区| 国色天香精品亚洲精品| 欧美三级视频| 天天射天天草| 亚洲www美色| 欧美白人极品性喷潮| 午夜黄大色黄大片美女图片| av 狼| 色偷偷女男人的天堂亚洲网| 成年人网站免费观看| 午夜在线亚洲男人午在线| 婷婷丁香视频| 站长工具天天爽视频| 中文字幕一区二区三区免费看| 色多多在线观看| 午夜不卡在线| 免费一区二区三区| 精品国产成人系列| 国产xxxx极品bbw视色| 五月天在线播放| 夜夜夜夜夜夜夜猛噜噜噜噜噜噜| 黄色在线| 你懂的免费| 国产午夜毛片v一区二区三区| 亚洲色图在线视频| 97在线亚洲| 视频免费1区二区三区| 久久人视频| 99香蕉国产| 日本最色视频| 久久精品免费观看久久| 四虎影院在线免费观看视频| 天天夜夜骑| 亚洲人成电影综合网站色| 18女毛片|