一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

電子工程技術(shù) ? 來源:機(jī)器之心 ? 2020-06-08 16:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

合并

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

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

Fast-forward (—ff)

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

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

No-fast-foward (—no-ff)

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

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

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

合并沖突

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

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

如果我們想把 dev 合并到 master,就會出現(xiàn)一個(gè)合并沖突:你想要標(biāo)題是 Hello! 還是 Hey!?

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

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

變基(Rebasing)

我們剛看到可通過執(zhí)行 git merge 將一個(gè)分支的修改應(yīng)用到另一個(gè)分支。另一種可將一個(gè)分支的修改融入到另一個(gè)分支的方式是執(zhí)行 git rebase。

git rebase 會將當(dāng)前分支的提交復(fù)制到指定的分支之上。

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

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

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

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

交互式變基(Interactive Rebase)

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


在我們正在 rebase 的提交上,我們可以執(zhí)行以下 6 個(gè)動作:

reword:修改提交信息;

edit:修改此提交;

squash:將提交融合到前一個(gè)提交中;

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

exec:在每個(gè)提交上運(yùn)行我們想要 rebase 的命令;

drop:移除該提交。

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

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

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

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

軟重置

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

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

輸入 git status 后,你會看到我們?nèi)匀豢梢栽L問在之前的提交上做過的所有修改。這很好,這意味著我們可以修復(fù)這些文件的內(nèi)容,之后再重新提交它們! 硬重置

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

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

假設(shè) ec5be 添加了一個(gè) index.js 文件。但之后我們發(fā)現(xiàn)其實(shí)我們再也不需要由這個(gè)提交引入的修改了。那就還原 ec5be 提交吧!

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

現(xiàn)在 master 分支包含 76d12 引入的修改了。 取回(Fetching) 如果你有一個(gè)遠(yuǎn)程 Git 分支,比如在 GitHub 上的分支,當(dāng)遠(yuǎn)程分支上包含當(dāng)前分支沒有的提交時(shí),可以使用取回。比如當(dāng)合并了另一個(gè)分支或你的同事推送了一個(gè)快速修復(fù)時(shí)。

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

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

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

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

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    737

    瀏覽量

    22876
  • Git
    Git
    +關(guān)注

    關(guān)注

    0

    文章

    205

    瀏覽量

    16213

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

文章出處:【微信號:EngicoolArabic,微信公眾號:電子工程技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    SSH常用命令詳解

    SSH常用命令詳解
    的頭像 發(fā)表于 06-04 11:30 ?636次閱讀

    Linux常用命令大全

    Linux常用命令是指在Linux操作系統(tǒng)中廣泛使用的命令工具,這些命令工具可以完成各種不同的任務(wù),如管理文件和目錄、操作進(jìn)程、網(wǎng)絡(luò)通信、軟件安裝等。
    的頭像 發(fā)表于 05-03 18:08 ?1124次閱讀

    Docker常用命令大全

    Docker 是一種開源的應(yīng)用容器引擎,廣泛應(yīng)用于開發(fā)、部署和運(yùn)行分布式應(yīng)用。掌握 Docker 常用命令對于開發(fā)人員和運(yùn)維人員來說非常重要。本文將為大家整理常用的Docker 命令,并按照功能分為多個(gè)部分,幫助你高效使用 Do
    的頭像 發(fā)表于 04-22 12:47 ?395次閱讀

    Linux ip命令常用操作

    常用操作,幫助用戶更有效地管理和配置網(wǎng)絡(luò)。 ip命令基礎(chǔ) ip命令是?iproute2的一部分,主要用于顯示和操作路由表、網(wǎng)絡(luò)接口和隧道。其基本語法如下: ? ? ip [OPTI
    的頭像 發(fā)表于 02-19 10:23 ?672次閱讀

    Kubernetes Pod常用管理命令詳解

    Kubernetes Pod常用管理命令詳解
    的頭像 發(fā)表于 02-17 14:06 ?505次閱讀
    Kubernetes Pod<b class='flag-5'>常用</b>管理<b class='flag-5'>命令</b>詳解

    SAR ADC的工作過程和關(guān)鍵指標(biāo)

    ADC以其低功耗、高精度、小尺寸以及適中的速度和分辨率,在中等至高分辨率應(yīng)用中占據(jù)主導(dǎo)地位。本文將詳細(xì)介紹SAR ADC的概念、工作過程、關(guān)鍵指標(biāo)以及其在不同領(lǐng)域的應(yīng)用。
    的頭像 發(fā)表于 02-02 13:57 ?1394次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-本地倉庫管理之當(dāng)前分支內(nèi)的操作

    $ git reset HEAD -- hello1.c git的patch打入打出 簡單來說patch中存儲的是對代碼的修改。在git中我們
    發(fā)表于 01-18 10:25

    詳解kubectl常用命令

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

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

    極化整流器作為電化學(xué)整流系統(tǒng)的重要組成部分,在電解槽的保護(hù)和穩(wěn)定運(yùn)行中發(fā)揮著關(guān)鍵作用。本文將詳細(xì)闡述極化整流器的定義、作用、工作過程以及其在電解槽中的應(yīng)用。
    的頭像 發(fā)表于 10-11 10:27 ?1872次閱讀

    可調(diào)電源電路穩(wěn)壓工作過程是什么

    可調(diào)電源電路是一種電子設(shè)備,它可以提供可調(diào)節(jié)的電壓和電流輸出,廣泛應(yīng)用于電子實(shí)驗(yàn)、設(shè)備測試和維修等領(lǐng)域。穩(wěn)壓工作過程是可調(diào)電源電路的核心功能之一,它確保輸出電壓在負(fù)載變化或輸入電壓波動時(shí)保持穩(wěn)定
    的頭像 發(fā)表于 10-09 17:12 ?848次閱讀

    SD的命令和響應(yīng)

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

    RC緩沖器的工作過程介紹

    緩沖器由電阻(R)和電容(C)組成。電容作為電荷存儲的介質(zhì),而電阻則提供放電路徑。這種組合使得RC緩沖器能夠在MOSFET關(guān)閉時(shí)儲存能量,并在MOSFET導(dǎo)通時(shí)釋放能量。 RC緩沖器的工作過程 1. 充電過程 當(dāng)MOSFET關(guān)閉時(shí),緩沖電容通過電阻R1充電。這個(gè)
    的頭像 發(fā)表于 10-04 16:25 ?813次閱讀
    RC緩沖器的<b class='flag-5'>工作過程</b>介紹

    只讀存儲器的基本結(jié)構(gòu)和工作過程

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

    簡述DMA控制器的工作過程

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

    Windows操作系統(tǒng)中的常用命令

    這些命令不僅能提高工作效率,還能幫助用戶解決許多復(fù)雜的問題。本系列文章將詳細(xì)介紹Windows操作系統(tǒng)中的常用命令,幫助你成為Windows極客!
    的頭像 發(fā)表于 08-07 15:40 ?1170次閱讀
    Windows操作系統(tǒng)中的<b class='flag-5'>常用命令</b>