這位小姐姐用動圖展示了10個Git命令,看完過目不忘!
作者:Lydia Hallie
來自:機器之心
鏈接:https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1
git merge、git rebase、git reset、git revert、git fetch、git pull、git reflog……你知道這些 git 命令執(zhí)行的究竟是什么任務(wù)嗎?如果你還有些分不清楚,那千萬不能錯過這篇文章。在本文中,熟知 JavaScript、TypeScript、GraphQL、Serverless、AWS、Docker 和 Golang 的 21 歲年輕軟件顧問 Lydia Hallie 通過動圖形式直觀地介紹了這些常用 git 命令的工作過程,包你過目不忘。
當(dāng)嘗試合并這些分支時,Git 會向你展示沖突出現(xiàn)的位置。我們可以手動移除我們不想保留的修改,保存這些修改,再次添加這個已修改的文件,然后提交這些修改。
完成!盡管合并沖突往往很讓人厭煩,但這是合理的:Git 不應(yīng)該瞎猜我們想要保留哪些修改。
在我們正在 rebase 的提交上,我們可以執(zhí)行以下 6 個動作:
reword:修改提交信息;
edit:修改此提交;
squash:將提交融合到前一個提交中;
fixup:將提交融合到前一個提交中,不保留該提交的日志消息;
exec:在每個提交上運行我們想要 rebase 的命令;
drop:移除該提交。
當(dāng)我們不想要之前提交的修改時,就會用到這個命令。也許這是一個 WIP 提交或者可能是引入了 bug 的提交,這時候就要執(zhí)行 git reset。
git reset 能讓我們不再使用當(dāng)前臺面上的文件,讓我們可以控制 HEAD 應(yīng)該指向的位置。
軟重置
軟重置會將 HEAD 移至指定的提交(或與 HEAD 相比的提交的索引),而不會移除該提交之后加入的修改!
假設(shè)我們不想保留添加了一個 style.css 文件的提交 9e78i,而且我們也不想保留添加了一個 index.js 文件的提交 035cc。但是,我們確實又想要保留新添加的 style.css 和 index.js 文件!這是軟重置的一個完美用例。
輸入 git status 后,你會看到我們?nèi)匀豢梢栽L問在之前的提交上做過的所有修改。這很好,這意味著我們可以修復(fù)這些文件的內(nèi)容,之后再重新提交它們!
有時候我們并不想保留特定提交引入的修改。不同于軟重置,我們應(yīng)該再也無需訪問它們。Git 應(yīng)該直接將整體狀態(tài)直接重置到特定提交之前的狀態(tài):這甚至包括你在工作目錄中和暫存文件上的修改。
Git 丟棄了 9e78i 和 035cc 引入的修改,并將狀態(tài)重置到了 ec5be 的狀態(tài)。
假設(shè) ec5be 添加了一個 index.js 文件。但之后我們發(fā)現(xiàn)其實我們再也不需要由這個提交引入的修改了。那就還原 ec5be 提交吧!
通過在這個遠程分支上執(zhí)行 git fetch,我們就可在本地獲取這些修改。這不會以任何方式影響你的本地分支:fetch 只是單純地下載新的數(shù)據(jù)而已。
git reflog 是一個非常有用的命令,可以展示已經(jīng)執(zhí)行過的所有動作的日志。包括合并、重置、還原,基本上包含你對你的分支所做的任何修改。
假設(shè)我們實際上并不需要合并原有分支。當(dāng)我們執(zhí)行 git reflog 命令時,我們可以看到這個 repo 的狀態(tài)在合并前位于 HEAD@{1}。那我們就執(zhí)行一次 git reset,將 HEAD 重新指向在 HEAD@{1} 的位置。
作者:Lydia Hallie
翻譯:機器之心
來源:https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!