git操作

基本操作就不說了,這里詳細(xì)介紹其他中高級(jí)操作

1、查看日志
git log

這個(gè)命令對(duì)于提交少的項(xiàng)目比較友好,但是對(duì)于提交很多的項(xiàng)目,會(huì)輸出一大長(zhǎng)串,很不方便,于是有一個(gè)比較簡(jiǎn)便的命令:

git log --pretty=oneline

輸出:


git log
2、撤銷修改

背景
在一個(gè)文件中添加了一點(diǎn)代碼,現(xiàn)在我git add .了但是沒提交,現(xiàn)在我想撤銷我修改的東西

想要撤銷修改

解決方案
兩個(gè)命令:

git reset HEAD  src/main/java/com/tinner/demo03/constant/RedisContant.java
git checkout --  src/main/java/com/tinner/demo03/constant/RedisContant.java

效果

效果

3、創(chuàng)建分支

兩個(gè)命令:

git checkout -b dev
git switch -c dev
4、刪除分支
git branch -d <name>

如果要丟棄一個(gè)沒有被合并過的分支,可以通過git branch -D <name>強(qiáng)行刪除。

5、合并代碼
git merge --no-ff -m "注釋。。。。" <分支名>
6、stash

背景
在一個(gè)新的需求開發(fā)過程中,我在dev分支開發(fā)了一些東西,但是并沒有提交我也不想提交,這個(gè)時(shí)候來了一個(gè)bug,我必須將bug改完才能進(jìn)行dev的開發(fā),那么這個(gè)時(shí)候就需要用到git stash命令
步驟

  • 首先,我看看git倉(cāng)庫(kù)中的狀態(tài)


    git狀態(tài)

    可以看到,在dev分支,我創(chuàng)建了一個(gè)文件,修改了一個(gè)文件。

  • 然后,使用git stash命令,之后再來查看狀態(tài):
    儲(chǔ)藏代碼

    此時(shí)工作區(qū)是干凈的。然后我切換到master分支,創(chuàng)建一個(gè)issue分支,解決bug,合并到master,發(fā)版,之后再切換到dev分支,可以看到我的工作區(qū)還是干凈的,那么之前的代碼跑哪去了?
  • 使用git stash list可以查看儲(chǔ)藏的代碼列表
    git stash list
  • 現(xiàn)在我們需要恢復(fù)之前的代碼,有兩個(gè)命令可以參考:
git stash apply
git stash pop

git stash apply命令恢復(fù)后,stash內(nèi)容并不刪除,你需要用git stash drop來刪除;

git stash apply

另一種方式是用git stash pop,恢復(fù)的同時(shí)把stash內(nèi)容也刪了

git stash pop
  • 你可以多次stash,恢復(fù)的時(shí)候,先用git stash list查看,然后恢復(fù)指定的stash,用命令:
git stash apply stash@{0}

擴(kuò)展
我們知道,master的bug修復(fù)之后,在現(xiàn)在的dev代碼相關(guān)的bug并沒有修復(fù),所以,這個(gè)bug其實(shí)在當(dāng)前dev分支上也存在。
如何快速修復(fù)?
同樣的bug,要在dev上修復(fù),我們只需要把修復(fù)issuebug這個(gè)提交所做的修改“復(fù)制”到dev分支。注意:我們只想復(fù)制修復(fù)issuebug這個(gè)提交所做的修改,并不是把整個(gè)master分支merge過來。

為了方便操作,Git專門提供了一個(gè)cherry-pick命令,讓我們能復(fù)制一個(gè)特定的提交到當(dāng)前分支:

git cherry-pick <版本號(hào)>
修復(fù)bug

image.png

git cherry-pick,我們就不需要在dev分支上手動(dòng)再把修bug的過程重復(fù)一遍。

幾個(gè)命令的區(qū)別

merge和rebase的區(qū)別

merge和rebase都是用來合并分支的。

  • 采用merge和rebase后,git log的區(qū)別,merge命令不會(huì)保留merge的分支的commit
merge和rebase
  • 處理沖突的方式:
    (一股腦)使用merge命令合并分支,解決完沖突,執(zhí)行g(shù)it add .和git commit -m 'fix conflict'。這個(gè)時(shí)候會(huì)產(chǎn)生一個(gè)commit。
    (交互式)使用rebase命令合并分支,解決完沖突,執(zhí)行g(shù)it add .和git rebase --continue,不會(huì)產(chǎn)生額外的commit。這樣的好處是"干凈",分支上不會(huì)有無意義的解決分支的commit;壞處:如果合并的分支中存在多個(gè)commit,需要重復(fù)處理多次沖突。
git pull和git pull --rebase

git pull做了兩個(gè)操作分別是獲取合并。所以加了rebase就是以rebase的方式進(jìn)行合并分支,默認(rèn)為merge。

git merge 和 git merge --no-ff的區(qū)別

git merge –no-ff 可以保存你之前的分支歷史。能夠更好的查看 merge歷史,以及branch 狀態(tài)。
git merge 則不會(huì)顯示 feature,只保留單條分支記錄。

git merge 和 git merge --no-ff的區(qū)別

tag相關(guān)

在當(dāng)前分支的最新commit上打tag

git tag v1.0

在f52c633版本的提交上打tag

git tag v0.9 f52c633

查看所有的tag

git tag

注意,標(biāo)簽不是按時(shí)間順序列出,而是按字母排序的

還可以創(chuàng)建帶有說明的標(biāo)簽,用-a指定標(biāo)簽名,-m指定說明文字:

git tag -a v0.1 -m "文字說明" 1094adb

用命令git show <tagname>可以看到說明文字
提交v1.0標(biāo)簽

git push origin v1.0

提交所有的標(biāo)簽

git push origin --tags
標(biāo)簽

tag

從本地刪除tag:

git tag -d v0.9

刪除遠(yuǎn)程tag:

git push origin :refs/tags/v0.9
tag刪除

Git HEAD^與HEAD~的關(guān)系

一張圖:


Git HEAD^與HEAD~的關(guān)系

Git reset后面跟的參數(shù)

比如我在我的本地目錄下面新建了一個(gè)文件c.txt,add到了我的暫存區(qū)(緩沖區(qū)),同時(shí)也commit提交到了本地倉(cāng)庫(kù)
默認(rèn):git reset = git reset --mixed,這個(gè)命令會(huì)跳轉(zhuǎn)到指定版本、緩存區(qū)的文件還原、但是工作區(qū)(本地目錄)下的文件不會(huì)還原
git reset --hard這個(gè)命令會(huì)跳轉(zhuǎn)到指定版本、緩存區(qū)的文件還原、工作區(qū)(本地目錄)下的文件也會(huì)被還原
git reset --soft這個(gè)命令會(huì)跳轉(zhuǎn)到指定版本、緩存區(qū)的文件不會(huì)被還原、而且工作區(qū)(本地目錄)下的文件也不會(huì)還原

git revert

git revert會(huì)產(chǎn)生一個(gè)commit,撤銷某次操作,此次操作之前和之后的commit和history都會(huì)被保留,并且會(huì)把這次撤銷作為一次最新的提交。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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