Git實(shí)操項(xiàng)目中的奇淫技巧

在公司發(fā)現(xiàn),很多工作很久的同事對(duì)git的操作都僅限于 commit、push、merge。結(jié)合自己項(xiàng)目中實(shí)際遇到的問(wèn)題,優(yōu)雅的解決各種代碼操作場(chǎng)景問(wèn)題。

git reset --soft HEAD~1

使用場(chǎng)景:在開(kāi)發(fā)過(guò)程中,有時(shí)候開(kāi)發(fā)流程突然被打斷,需要切換分支去看別的問(wèn)題,這個(gè)時(shí)候就隨后將本地代碼進(jìn)行了一個(gè)臨時(shí)的commit,然后切換回來(lái)的時(shí)候,雖然可以繼續(xù)開(kāi)發(fā),但是由于之前commit的功能不完整,并且繼續(xù)開(kāi)發(fā)的時(shí)候IDE上面對(duì)已經(jīng)commit的文件沒(méi)有顏色分別,有時(shí)候,改了很多文件,需要自己能夠顯式的看到自己對(duì)這個(gè)功能改動(dòng)的哪些文件,還要繼續(xù)接著改。那么這個(gè)命令會(huì)將你最后一個(gè)commit 回退到工作區(qū) ,后續(xù)開(kāi)發(fā)完成后再進(jìn)行commit。切記,不建議任何時(shí)候使用git reset --hard這個(gè)命令。

git commit --amend

使用場(chǎng)景:在開(kāi)發(fā)完成后,在已經(jīng)完整功能commit的情況下,突然發(fā)現(xiàn)還有一個(gè)小小的改動(dòng),可能就只是一個(gè)空格,這個(gè)時(shí)候,不想單獨(dú)的去開(kāi)個(gè)commit去提交這個(gè)空格,并且這個(gè)空格本來(lái)就是屬于上面那個(gè)功能,那么可以使用這個(gè)命令,將其追加到上個(gè)commit中。

1. git add .
  • add 需要追加的文件,add .是當(dāng)前工作區(qū)所有的文件,可以自己選擇性的追加也行。
2. git commit --amend
  • 這一步之后,會(huì)有vi框提示可以修改commit信息

git cherry-pick

使用場(chǎng)景:有時(shí)候好幾個(gè)人都在自己的功能分支上開(kāi)發(fā)的時(shí)候,需要依賴另外一個(gè)人的分支上的某個(gè)commit功能,但是這個(gè)時(shí)候?qū)Ψ降墓δ懿](méi)有完成,也不是自己需要的,只需要他其中某一個(gè)commit,自己這邊的流程才能繼續(xù)走下去,這個(gè)時(shí)候就需要把對(duì)方的某個(gè)commit給檢索到自己的本地分支上面來(lái)。

1.git cherry-pick <HashA> <HashB>
  • 這個(gè)地方需要找到commit的hash值,可以通過(guò)git log查看??梢砸淮蝐herry多個(gè)commit。如果沒(méi)有沖突則流程結(jié)束。
2. git add .
  • 這一步和rebase沖突一樣,加入緩存區(qū)。
3. git cherry-pick --continue
  • 繼續(xù)進(jìn)行pick,依然有沖突則重復(fù) 2、3步驟

git push origin temp:feature/home

使用場(chǎng)景:在本地開(kāi)發(fā)中,一直都在同一個(gè)分支上開(kāi)發(fā)。本地分支名字起的不太好,或者本地分支也有對(duì)應(yīng)的遠(yuǎn)程分支,之前已經(jīng)有過(guò)merge,本地commit有過(guò)rebase merge等操作,如果直接push到origin會(huì)與遠(yuǎn)程同名分支產(chǎn)生沖突,導(dǎo)致推不上去,這個(gè)時(shí)候可以將本地分支推送到遠(yuǎn)程的時(shí)候換一個(gè)名字。

1. git push origin temp:feature/home
  • 這個(gè)推送的意思是,本地的分支名字叫做temp,代碼推送到遠(yuǎn)程時(shí)的分支名字是 feature/home

git rebase

使用場(chǎng)景:在正常我們進(jìn)行任務(wù)開(kāi)發(fā)時(shí)候,是不會(huì)在master上直接拉分支開(kāi)發(fā),一般每個(gè)迭代會(huì)有一個(gè)基準(zhǔn)分支,假設(shè)為dev。 那么我們自己基于dev分支check出自己的開(kāi)發(fā)分支feat后,commit后肯定是需要同步一下我們的dev分支才能發(fā)起review的,這個(gè)時(shí)候很可能就會(huì)產(chǎn)生沖突。那么如何解決沖突了?

1. git rebase origin/dev
  • 這里也可以本地切換到dev分支pull后,再進(jìn)行 git rebase dev,直接拉遠(yuǎn)程肯定是最新的。這個(gè)時(shí)候出現(xiàn)了沖突的話,本地先解決沖突。
2. git add .
  • add之后你的本次commit沖突就已經(jīng)被resolve,由于rebase是按commit一個(gè)一個(gè)的合并的,所有還需要繼續(xù)合并
3. git rebase --continue
  • 這一步之后,如果沒(méi)有沖突那么流程就結(jié)束了,如果依然有,則重復(fù)2、3步驟,直到結(jié)束。

git revert OLDER_COMMIT^..NEWER_COMMIT

使用場(chǎng)景:不知道大家有沒(méi)有碰到過(guò)這種場(chǎng)景,項(xiàng)目臨近上線時(shí)期,突然發(fā)現(xiàn)此功能因某些原因,不得不停止上線,此時(shí),這個(gè)功能你有連續(xù)十幾個(gè)commit需要回滾,那么怎么快速回滾了,我們可以通過(guò)此命令,回滾你的連續(xù)的十個(gè)commit,也就是可以區(qū)間選擇段來(lái)回滾

git rebase -i

使用場(chǎng)景:有時(shí)候commit記錄太多太雜,需要整理commit,譬如合并多個(gè)commit,或者刪除某個(gè)commit

1. git rebase -i HEAD~5
  • 這個(gè)代表你需要對(duì)最近的五個(gè)commit做合并或者刪除處理。
rebase.png
2. 如上圖 默認(rèn)都是pick,將pick改為s 則代表將當(dāng)前合并至上個(gè)commit,改為d則代表刪除當(dāng)個(gè)commit
squash.png
  • add之后你的本次commit沖突就已經(jīng)被resolve,由于rebase是按commit一個(gè)一個(gè)的合并的,所有還需要繼續(xù)合并
commit.png
  • 修改完commit之后,按wq保存退出

vi使用

  • 在上面這些命令中,很多都需要進(jìn)入到vi的編輯框進(jìn)行操作,默認(rèn)是命令行模式,需要按a或者i來(lái)進(jìn)入輸入模式修改,這個(gè)時(shí)候就可以對(duì)里面文字就行修改操作。
  • 修改完后需要按esc 鍵回到命令行模式,然后按 : 進(jìn)入到底線命令行模式,這時(shí)按wq就可以保存退出了
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容