Git命令行

參考Git教程

1. 創(chuàng)建版本庫(kù)

命令 行為
git init 把當(dāng)前目錄變成Git可以管理的倉(cāng)庫(kù)(添加.git文件)
git add <file> 將工作區(qū)中的<file>文件添加到暫存區(qū)
git commit -m "information" 將暫存區(qū)中的<file>文件提交到當(dāng)前分支

注意理解工作區(qū)、版本庫(kù)、暫存區(qū)、分支的概念。

2. 版本回退(工作區(qū)、暫存區(qū)均重置)

命令 行為
git log 版本控制系統(tǒng)的歷史記錄
git log --pretty=oneline 將歷史記錄顯示在一行
git reset --hard HEAD^ 回退到上一個(gè)版本
git reset --hard HEAD^^ 回退到上上一個(gè)版本
git reset --hard <commit id> 回退該版本號(hào)
git reflog 用于查找版本號(hào)(當(dāng)前版本之后的版本)

3. 撤銷(xiāo)修改

命令 行為
git status 列出工作區(qū)、暫存區(qū)和當(dāng)前分支的狀態(tài)
git checkout -- <file> 撤銷(xiāo)工作區(qū)修改,使工作區(qū)的<file>與當(dāng)前暫存區(qū)的相同
git reset HEAD <file> 撤銷(xiāo)暫存區(qū)修改,使暫存區(qū)的<file>與當(dāng)前分支的相同,

場(chǎng)景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容,想直接丟棄工作區(qū)的修改時(shí),用命令git checkout -- file
場(chǎng)景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容,還添加到了暫存區(qū)時(shí),想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場(chǎng)景1,第二步按場(chǎng)景1操作。
場(chǎng)景3:已經(jīng)提交了不合適的修改到版本庫(kù)時(shí),想要撤銷(xiāo)本次提交,參考版本回退,不過(guò)前提是沒(méi)有推送到遠(yuǎn)程庫(kù)。

4.刪除文件

命令 行為
git rm <file> 從暫存區(qū)刪除<file>,同時(shí)刪除工作區(qū)的<file>

在工作區(qū)刪除文件后,有兩種選擇:

  1. 確實(shí)要從版本庫(kù)中刪除該文件,那就用命令git rm刪掉,并且git commit,現(xiàn)在,文件就從版本庫(kù)中被刪除了。
  2. 另一種情況是刪錯(cuò)了,從當(dāng)前分支恢復(fù)到暫存區(qū)git reset HEAD <file>,從暫存區(qū)恢復(fù)到工作區(qū)git checkout -- <file>。

4. 遠(yuǎn)程倉(cāng)庫(kù)

添加遠(yuǎn)程庫(kù)

  • 創(chuàng)建SSH-Key
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • 將當(dāng)前版本庫(kù)與github遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián) (git remote add)
    git remote add origin git@github.com:michaelliao/learngit.git (復(fù)制SSH地址)
  • 將本地倉(cāng)庫(kù)的所有內(nèi)容推送到遠(yuǎn)程倉(cāng)庫(kù) (git push -u)
    git push -u origin master
    由于遠(yuǎn)程庫(kù)是空的,我們第一次推送master分支時(shí),加上了-u參數(shù),Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來(lái),在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令。

從遠(yuǎn)程庫(kù)克?。╣it clone)

  • git clone git@github.com:michaelliao/gitskills.git (復(fù)制SSH地址)

5. 分支管理

創(chuàng)建與合并分支

命令 行為
git branch dev 創(chuàng)建dev分支
git checkout dev 切換到dev分支
git checkout -b dev 創(chuàng)建并切換到dev分支
git branch 查看分支
git merge dev 合并指定分支到當(dāng)前分支。Fast-forward表示“快進(jìn)模式”
git branch -d dev 刪除合并過(guò)的dev分支
git branch -D dev 刪除沒(méi)有被合并過(guò)的dev分支

開(kāi)發(fā)一個(gè)新feature,最好新建一個(gè)分支;
如果要丟棄一個(gè)沒(méi)有被合并過(guò)的分支,可以通過(guò)git branch -D <name>強(qiáng)行刪除。

解決沖突

命令 行為
git log --graph --pretty=oneline --abbrev-commit 可以看到分支合并圖

分支管理策略

命令 行為
git merge --no-ff -m "merge with no-ff" dev 禁用Fast forward(快進(jìn)模式)

合并分支時(shí),加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支,能看出來(lái)曾經(jīng)做過(guò)合并,而fast forward合并就看不出來(lái)曾經(jīng)做過(guò)合并。

Bug分支

命令 行為
git stash 可以把當(dāng)前工作現(xiàn)場(chǎng)“儲(chǔ)藏”起來(lái),等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作
git stash list 查看所有工作現(xiàn)場(chǎng)列表
git stash apply stash@{id} 恢復(fù)工作現(xiàn)場(chǎng)
git stash drop stash@{id} 刪除工作現(xiàn)場(chǎng)
git stash pop stash@{id} 回復(fù)后再刪除工作現(xiàn)場(chǎng)(只有一個(gè)是可省略stash@{id})

因?yàn)楫?dāng)前正在做的分支沒(méi)有commit時(shí),操作其他分支工作區(qū)會(huì)受到影響,因此需要git stash。修復(fù)bug時(shí),我們會(huì)通過(guò)創(chuàng)建新的bug分支進(jìn)行修復(fù),然后合并,最后刪除;當(dāng)手頭工作沒(méi)有完成時(shí),先把工作現(xiàn)場(chǎng)git stash一下,然后去修復(fù)bug,修復(fù)后,再git stash pop,回到工作現(xiàn)場(chǎng)。

多人協(xié)作

命令 行為
git remote 查看遠(yuǎn)程庫(kù)的信息
git remote -v 查看遠(yuǎn)程庫(kù)的詳細(xì)信息
git push origin dev 將dev分支推送到遠(yuǎn)程庫(kù)
git checkout -b dev origin/dev 由于克隆是只克隆master分支,在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支
git pullgit fetch git pull取回遠(yuǎn)程主機(jī)某個(gè)分支的更新,再與本地的指定分支合并
git branch --set-upstream dev origin/dev 如果git pull提示“no tracking information”,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建

多人協(xié)作的工作模式通常是這樣:

  1. 首先,可以試圖用git push origin branch-name推送自己的修改;
  2. 如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你的本地更新,需要先用git pull試圖合并;
  3. 如果合并有沖突,則解決沖突,并在本地提交;
  4. 沒(méi)有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功!

6. 標(biāo)簽

命令 行為
git tag v1.0 為當(dāng)前分支的當(dāng)前版本創(chuàng)建標(biāo)簽
git tag v1.0 6224937(commit id) 為這個(gè)版本創(chuàng)建標(biāo)簽
git tag -a v1.0 -m "version v1.0 released" 6224937 -a指定標(biāo)簽名,-m指定說(shuō)明信息
git tag 查看所有標(biāo)簽
git show v1.0 查看標(biāo)簽信息
git tag -d v1.0 刪除本地標(biāo)簽
git push origin v1.0 推送某個(gè)標(biāo)簽到遠(yuǎn)程
git push origin --tags 一次性推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽
git tag -d v1.0git push origin :refs/tags/v1.0 先刪除本地標(biāo)簽,再刪除遠(yuǎn)程標(biāo)簽
最后編輯于
?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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