Git命令詳解(轉(zhuǎn))

Git命令詳解

添加操作

git add .                              //全部提交到暫存區(qū)

提交操作

git commit -m <description>           //提交到本地庫(kù)(必須先add)
git commit -am                        //可提交未add文件,但是不包括未創(chuàng)建文件
git commit --amend                    //這個(gè)命令會(huì)將暫存區(qū)中的文件提交。 如果自上次提交以來(lái)你還未做任何修改(例如,在上次提交后馬上執(zhí)行了此命令),那么快照會(huì)保持不變,而你所修改的只是提交信息。

刪除操作

git rm <file>             //從暫存區(qū)刪除(stage)  

git rm -f <file>          //刪除之前修改過并且已經(jīng)放到暫存區(qū)域
git rm --cached <file>    //如果把文件從暫存區(qū)域移除,但仍然希望保留在當(dāng)前工作目錄中,換句話說,僅是從跟蹤清單中刪除

撤銷操作

在Git中,用HEAD表示當(dāng)前版本。

git HEAD
git HEAD~        //上一個(gè)版本
git HEAD~100     //往上100個(gè)版本

撤銷add

git checkout <file>          //恢復(fù)未提交的更改
git reset HEAD <file>        //取消之前 git add 添加

撤銷commit

image.png
  • git reset
git reset --hard HEAD~              //回退到上一個(gè)版本
git reset --hard <commit ID>        //回退到指定版本

版本直接回退,簡(jiǎn)單粗暴。

如果遠(yuǎn)程分支也想要回退,git push -f (known changes)。

  • git revert
git revert HEAD //撤銷前一次commit

不能隨便刪除已經(jīng)發(fā)布的提交,這時(shí)需要通過revert創(chuàng)建要否定的提交。

image.png

如果不小心提交了不想要的代碼,而小伙伴在你發(fā)現(xiàn)時(shí),已經(jīng)提交了,這時(shí)候就不能簡(jiǎn)單的回退版本。

git revert <commit ID> //需要撤銷的提交ID

這時(shí)候會(huì)有沖突,解決沖突之后,再重新提交,那么就會(huì)產(chǎn)生一條新的提交紀(jì)錄。

提交到遠(yuǎn)程分支,git push。

git revert 和 git reset的區(qū)別

  • git revert是用一次新的commit來(lái)回滾之前的commit,git reset是直接刪除指定的commit。
  • 在回滾這一操作上看,效果差不多。但是在日后繼續(xù)merge以前的老版本時(shí)有區(qū)別。因?yàn)間it revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch時(shí),導(dǎo)致這部分改變不會(huì)再次出現(xiàn),但是git reset是之間把某些commit在某個(gè)branch上刪除,因而和老的branch再次merge時(shí),這些被回滾的commit應(yīng)該還會(huì)被引入。
  • git reset 是把HEAD向后移動(dòng)了一下,而git revert是HEAD繼續(xù)前進(jìn),只是新的commit的內(nèi)容和要revert的內(nèi)容正好相反,能夠抵消要被revert的內(nèi)容。

移動(dòng)或重命名操作

git mv 命令用于移動(dòng)或重命名一個(gè)文件、目錄。

git mv <file> 
git mv <old name>  <new name>

其實(shí),運(yùn)行 git mv 就相當(dāng)于運(yùn)行了下面三條命令:

mv README.md README
git rm README.md
git add README

git rebase

git rebase和git merge區(qū)別
image.png
image.png

在rebase的過程中,也許會(huì)出現(xiàn)沖突(conflict)。 在這種情況,Git會(huì)停止rebase并會(huì)讓你去解決沖突;在解決完沖突后,用"git-add"命令去更新這些內(nèi)容的索引(index), 然后,你無(wú)需執(zhí)行 git-commit,只要執(zhí)行:

git rebase --continue      //繼續(xù)
git rebase --abort         //取消
git rebase -i

在rebase指定i選項(xiàng),您可以改寫、替換、刪除或合并提交。

git rebase -i [startpoint] [endpoint]

其中-i的意思是--interactive,即彈出交互式的界面讓用戶編輯完成合并操作,[startpoint] [endpoint]則指定了一個(gè)編輯區(qū)間,如果不指定[endpoint],則該區(qū)間的終點(diǎn)默認(rèn)是當(dāng)前分支HEAD所指向的commit(注:該區(qū)間指定的是一個(gè)前開后閉的區(qū)間)。

  • pick:保留該commit(縮寫:p)
  • reword:保留該commit,但我需要修改該commit的注釋(縮寫:r)
  • edit:保留該commit, 但我要停下來(lái)修改該提交(不僅僅修改注釋)(縮寫:e)
  • squash:將該commit和前一個(gè)commit合并(縮寫:s)
  • fixup:將該commit和前一個(gè)commit合并,但我不要保留該提交的注釋信息(縮寫:f)
  • exec:執(zhí)行shell命令(縮寫:x)
  • drop:我要丟棄該commit(縮寫:d)
合并歷史紀(jì)錄
git rebase -i HEAD~2

//我們會(huì)進(jìn)入vit模式,將pick改成squash,然后按esc : wq(保存并退出)。

git push -f
image.png
image.png

git status

要查看哪些文件處于什么狀態(tài)。

git status -s | git status --short //得到一種更為緊湊的格式輸出

git diff

git diff 命令顯示add與commit的改動(dòng)區(qū)別。

git diff  <file>            //尚未緩存的改動(dòng)
git diff --cached           //查看已緩存的改動(dòng)
git diff HEAD               //查看已緩存的與未緩存的所有改動(dòng)
git diff --stat             //顯示摘要而非整個(gè) diff

查看提交歷史

git log

在提交了若干更新,又或者克隆了某個(gè)項(xiàng)目之后,你也許想回顧下提交歷史。 完成這個(gè)任務(wù)最簡(jiǎn)單而又有效的工具是 git log 命令。

git log -p          //用來(lái)顯示每次提交的內(nèi)容差異
git log -2          //僅顯示最近兩次提交
git log --stat      //每次提交的簡(jiǎn)略的統(tǒng)計(jì)信息
git log --pretty    //指定使用不同于默認(rèn)格式的方式展示提交歷史,git log --pretty=oneline

使用git show命令查看某一次提交詳細(xì)信息。

git reflog

如果在回退以后又想再次回到之前的版本,git reflog 可以查看所有分支的所有操作記錄(包括commit和reset的操作),包括已經(jīng)被刪除的commit記錄,git log則不能察看已經(jīng)刪除了的commit記錄。

git reflog

git stash

在Git中,隱藏操作將使您能夠修改跟蹤文件,階段更改,并將其保存在一系列未完成的更改中,并可以隨時(shí)重新應(yīng)用。

git stash          //把當(dāng)前工作的改變隱藏起來(lái)
git stash list     //查看已存在更改的列表
git stash pop      //可從堆棧中刪除更改并將其放置在當(dāng)前工作目錄中

分支操作

創(chuàng)建分支
git branch <branch name>               //創(chuàng)建分支
git checkout <branch name>             //切換到分支

git checkout -b <branch name>          //創(chuàng)建并切換到分支
刪除分支
git branch -d <branch name>
git branch -D <branch name>       //強(qiáng)制刪除分支
查看分支
git branch <name>
git branch -a      //查看所有分支
git branch -r      //查看遠(yuǎn)程分支
重命名分支
git branch -m <old name> <new name>
合并分支
git checkout master                    //切換到master
git merge <branch name>                //合并分支

如果分支未pull最新代碼,那么提交的時(shí)候,歷史紀(jì)錄就不清晰;匯合分支上的提交,然后一同合并到分支

image.png
git merge –squash <branch name>
git commit -am
git push
提取其他分支提交

在cherry-pick,您可以從其他分支復(fù)制指定的提交,然后導(dǎo)入到現(xiàn)在的分支。

git cherry-pick <commit id>

標(biāo)簽操作

如果你達(dá)到一個(gè)重要的階段,并希望永遠(yuǎn)記住那個(gè)特別的提交快照,你可以使用 git tag 給它打上標(biāo)簽。

創(chuàng)建標(biāo)簽
git tag <name>
git tag -a <name>              //創(chuàng)建一個(gè)帶注解的標(biāo)簽
查看標(biāo)簽
git taggit show <tag name>
git push origin <tag name>
刪除標(biāo)簽
git tag -d <name>
最后編輯于
?著作權(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)容