Git复习(十一)之常见命令用法
創(chuàng)建版本庫(kù)
git init進(jìn)入一個(gè)文件,執(zhí)行該命令此時(shí)目錄下多了一個(gè).git的目錄,這個(gè)目錄是Git來(lái)跟蹤管理版本庫(kù)的,沒(méi)事千萬(wàn)不要手動(dòng)修改這個(gè)目錄里面的文件,不然改亂了,就把Git倉(cāng)庫(kù)給破壞了。如果你沒(méi)有看到.git目錄,那是因?yàn)檫@個(gè)目錄默認(rèn)是
隱藏的,用ls -ah命令就可以看見。
添加文件到Git倉(cāng)庫(kù)
第一步:添加到暫存區(qū)
git add xxxxxx可以是“.”表示所有文件,也可以是指定的文件名,該命令可反復(fù)多次使用,添加多個(gè)文件
??如果此時(shí)添加失敗,可能是這個(gè)文件被.gitignore忽略了,如果我們確實(shí)想添加該文件可以使用參數(shù) -f?
強(qiáng)制添加文件
git add -f xxx第二步:提交到倉(cāng)庫(kù)
git commit -m "xxx"xxx是本次提交的說(shuō)明,可以輸入任意內(nèi)容,當(dāng)然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動(dòng)記錄。
執(zhí)行完該命令可能會(huì)提示:
-
1 file changed:1個(gè)文件被改動(dòng)
-
2 insertions:插入了兩行內(nèi)容
??如果不用git add到暫存區(qū),那就不會(huì)加入到commit中
查看當(dāng)前工作區(qū)的狀態(tài)?
git status執(zhí)行完該命令可能會(huì)提示:?
-
Changes not staged for commit(還沒(méi)有準(zhǔn)備提交的修改)
查看修改內(nèi)容
情況一:查看當(dāng)前文件的修改
git diff xxxxxx想要查看修改的文件名
情況二:查看當(dāng)前版本和版本庫(kù)最新版本的區(qū)別
git reset HEAD -- xxxxxx想要查看修改的文件名
查看提交歷史
git log?命令顯示從最近到最遠(yuǎn)的提交日志,可以通過(guò)git log來(lái)確定要回退到哪個(gè)版本
git log --pretty=oneline嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數(shù)
??你看到的一大串類似1094adb...的是commit id(版本號(hào))
版本回退(已經(jīng)commit,回到某一個(gè)commit)
git reset --hard xxxxxx表示版本號(hào)或者HEAD
情況一:回退到上一個(gè)版本
git reset --hard HEAD^情況二:回退到上上一個(gè)版本
git reset --hard HEAD^^情況三:回退到上100個(gè)版本
git reset --hard HEAD~100首先,Git必須知道當(dāng)前版本是哪個(gè)版本,在Git中,用HEAD表示當(dāng)前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一樣),上一個(gè)版本就是HEAD^,上上一個(gè)版本就是HEAD^^,當(dāng)然往上100個(gè)版本寫100個(gè)^比較
容易數(shù)不過(guò)來(lái),所以寫成HEAD~100。
情況四:回退到回退之前的版本
git reset --hard xxxxxx是想要回退的那個(gè)版本的commit id(版本號(hào)),其余三個(gè)情況也可以不使用HEAD,使commit id
兩種方法取到該版本號(hào):
-
只要上面的命令行窗口還沒(méi)有被關(guān)掉,你就可以順著往上找啊找啊
-
使用git reflog查看命令歷史找到該版本號(hào)
撤銷修改
情況一:已修改,未暫存,回退到最近一次commit(修改看不見了)
git checkout -- xxxxxx可以是“.”也可以是指定文件名,此操作其實(shí)就是丟棄對(duì)工作區(qū)的修改
情況二:已修改,已暫存,回退到最近一次add
git checkout -- xxxxxx可以是“.”也可以是指定文件名,這種情況是git add后又做了修改,想要回退到add
情況三:已修改,已暫存,未提交,回退到工作區(qū)(修改保留在工作區(qū))
git reset HEAD xxxxxx可以是“.”也可以是指定文件名,此時(shí)可以使用git checkout丟棄對(duì)工作區(qū)的修改
情況四:已修改,已暫存,已提交,回退到上一個(gè)commit
git reset --hard HEAD^從版本庫(kù)刪除文件
git rm xxxxxx是文件名,命令git rm用于刪除一個(gè)文件。如果一個(gè)文件已經(jīng)被提交到版本庫(kù),那么你永遠(yuǎn)不用擔(dān)心誤刪,但是要小心,你只能恢復(fù)文件到最新版本,你會(huì)丟失最近一次提交后你修改的內(nèi)容。
刪除文件
rm xxxxxx是文件名,只是刪除本地
接下來(lái)有兩個(gè)選擇:
-
確實(shí)要從版本庫(kù)中刪除該文件:git rm xxx -> git commit
-
刪錯(cuò)了恢復(fù)到最新版本:git checkout -- xxx
查看命令歷史
git reflog關(guān)聯(lián)本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)
情況一:先在本地創(chuàng)建了一個(gè)倉(cāng)庫(kù),然后在遠(yuǎn)程也創(chuàng)建了一個(gè)倉(cāng)庫(kù),現(xiàn)在想要將他們關(guān)聯(lián),也就是先有本地庫(kù),然后有遠(yuǎn)程庫(kù)
git remote add origin xxxxxx是遠(yuǎn)程倉(cāng)庫(kù)地址,origin是遠(yuǎn)程倉(cāng)庫(kù)名字(默認(rèn))
情況二:先在遠(yuǎn)程創(chuàng)建一個(gè)倉(cāng)庫(kù),然后從遠(yuǎn)程庫(kù)克隆
從遠(yuǎn)程庫(kù)克隆
git clone xxxxxx是遠(yuǎn)程倉(cāng)庫(kù)地址
創(chuàng)建分支
情況一:從本地已存在的分支創(chuàng)建一個(gè)新的分支(相當(dāng)于克隆當(dāng)前本地分支)?
方法一:
git branch xxx?xxx是分支名,這種方法創(chuàng)建的分支并不會(huì)切換分支,還是在當(dāng)前分支
方法二:?
git checkout -b xxxxxx是分支名,這種方法創(chuàng)建的分支會(huì)切換分支,在新創(chuàng)建的分支
情況二:從遠(yuǎn)程已存在的分支創(chuàng)建一個(gè)新的分支(相當(dāng)于克隆遠(yuǎn)程分支到本地)
git checkout xxx1 -b xxx2xxx1是遠(yuǎn)程分支名,xxx2是本地分支名
假設(shè)一:該分支是我們自己在遠(yuǎn)程庫(kù)創(chuàng)建的
xxx1和xxx2不同名:那么相當(dāng)于我們?cè)诒镜鼗谠撨h(yuǎn)程分支新創(chuàng)建了一個(gè)分支,之后提交操作都會(huì)提交到我們新創(chuàng)建的這個(gè)分支的遠(yuǎn)程分支上
xxx1和xxx2同名:相當(dāng)于我們?cè)诒镜貏?chuàng)建了該遠(yuǎn)程分支的本地分支,并與之關(guān)聯(lián),之后提交操作都會(huì)提交到該遠(yuǎn)程分支上
假設(shè)二:該分支是其他人在遠(yuǎn)程庫(kù)創(chuàng)建的(多人合作開發(fā))
xxx1和xxx2不同名:那么相當(dāng)于我們?cè)诒镜鼗谠撨h(yuǎn)程分支新創(chuàng)建了一個(gè)“自己”的分支,只有我們自己用,提交不會(huì)有沖突
xxx1和xxx2同名:相當(dāng)于我們?cè)诒镜貏?chuàng)建了該遠(yuǎn)程分支的本地分支,并與之關(guān)聯(lián),之后提交操作都會(huì)提交到該遠(yuǎn)程分支上,因?yàn)榇蠹叶际菑脑摲种?chuàng)建的本地分支,然后提交,所以可能會(huì)出現(xiàn)沖突
切換分支
git checkout xxxxxx是分支名
查看分支
情況一:查看本地分支
git branch該命令會(huì)列出本地所有分支,當(dāng)前分支前面會(huì)標(biāo)一個(gè)*號(hào)
情況二:查看遠(yuǎn)程分支?
git branch -r該命令會(huì)列出遠(yuǎn)程所有分支
合并分支?
情況一:快速合并(不會(huì)創(chuàng)建新的提交,分支合并圖中看不出來(lái)曾經(jīng)做過(guò)合并)
git merge xxxxxx是分支名,該命令會(huì)將xxx合并到當(dāng)前分支
如果沒(méi)有沖突,執(zhí)行該命令會(huì)提示?Fast-forward,Git告訴我們,這次合并是"快進(jìn)模式",也就是直接把master指向dev的當(dāng)前提交,所以合并速度非常快。當(dāng)然,也不是每次合并都能Fast-forward,
情況二:非快速合并(創(chuàng)建新的提交,分支合并圖中可以看出來(lái)曾經(jīng)做過(guò)合并)
git merge --no-ff -m "merge with no-ff" xxxxxx是分支名,該命令會(huì)將xxx合并到當(dāng)前分支
--no-ff表示強(qiáng)制禁用Fast forward模式,因?yàn)楸敬魏喜⒁獎(jiǎng)?chuàng)建一個(gè)新的commit,所以加上-m參數(shù),把commit描述寫進(jìn)去。
刪除分支
情況一:分支已經(jīng)被合并
git branch -d xxxxxx是分支名
情況一:分支沒(méi)有被合并
git branch -D xxxxxx是分支名,強(qiáng)制刪除分支
注意;刪除分支前要先切換到其他分支,在刪除想要?jiǎng)h除的分支
查看分支合并圖?
git log --graph??可以添加參數(shù) --pertty=oneline和 --abbrev-commit?
推送分支
git push origin xxxxxx是分支名,推送分支,就是把該分支上的所有本地提交推送到遠(yuǎn)程庫(kù)。推送時(shí),要指定本地分支,這樣,Git就會(huì)把該分支推送到遠(yuǎn)程庫(kù)對(duì)應(yīng)的遠(yuǎn)程分支上,并不是一定要把本地分支往遠(yuǎn)程推送?
抓取分支(就是創(chuàng)建分支的情況二)
git checkout -b branch-name origin/branch-name?暫存工作現(xiàn)場(chǎng)
git stash??我們知道分支的更改不提交是沒(méi)辦法切換分支的,但是現(xiàn)在我就是不想提交當(dāng)前分支的修改切換分支,如何實(shí)現(xiàn)呢?就是使用該命令!!!,可以多次stash,恢復(fù)的時(shí)候,先用git stash list查看,然后恢復(fù)指定的stash
查看暫存內(nèi)容
git stash list?執(zhí)行該命令可以查看暫存內(nèi)容列表
恢復(fù)工作現(xiàn)場(chǎng)
情況一:恢復(fù)工作現(xiàn)場(chǎng)并刪除stash內(nèi)容
git stash pop情況一:恢復(fù)工作現(xiàn)場(chǎng)不刪除stash內(nèi)容
git stash apply stash@{0}stash@{0}是指定的stash,可選的
刪除暫存內(nèi)容
git stash drop復(fù)制特定提交到當(dāng)前分支
git cherry-pick xxxxxx是commit id,執(zhí)行該命令Git自動(dòng)給當(dāng)前分支做一次提交,假如我們?cè)赼分支上做了修改并提交,我希望b分支上也有這次修改:
-
獲取a分支此次修改提交的commit id
-
切到b分支
-
執(zhí)行g(shù)it cherry-pick commit id
案例:
$ git branch * devmaster $ git cherry-pick 4c805e2 [master 1d4b803] fix bug 1011 file changed, 1 insertion(+), 1 deletion(-)Git自動(dòng)給dev分支做了一次提交,注意這次提交的commit是1d4b803,它并不同于master的4c805e2,因?yàn)檫@兩個(gè)commit只是改動(dòng)相同,但確實(shí)是兩個(gè)不同的commit。用git cherry-pick,我們就不需要在dev分支上手動(dòng)再把修
bug的過(guò)程重復(fù)一遍。
查看遠(yuǎn)程庫(kù)信息
git remote執(zhí)行該命令輸出 origin ,遠(yuǎn)程倉(cāng)庫(kù)的默認(rèn)名稱是origin。可以添加參數(shù) -v 查看更加詳細(xì)的信息
git remote -v執(zhí)行該命令顯示可以抓取和推送的origin的地址。如果沒(méi)有推送權(quán)限,就看不到push的地址:
origin git@github.com:michaelliao/learngit.git (fetch)?
origin git@github.com:michaelliao/learngit.git (push)
建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián)
git branch --set-upstream branch-name origin/branch-name拉取服務(wù)器最新代碼
情況一:當(dāng)前本地分支和遠(yuǎn)程分支已經(jīng)關(guān)聯(lián)?
git pull情況二:當(dāng)前本地分支和遠(yuǎn)程分支沒(méi)有關(guān)聯(lián)
方法一:直接拉取指定的遠(yuǎn)程分支
git pull origin xxx?方法二:先建立當(dāng)前本地分支和遠(yuǎn)程分支的關(guān)聯(lián)在拉取
git branch --set-upstream-to=branchname origin/branchname再執(zhí)行
git pull創(chuàng)建標(biāo)簽
情況一:給當(dāng)前的版本創(chuàng)建標(biāo)簽
git tag xxxxxx是標(biāo)簽的名字,eg:v1.0
情況二:給指定的版本創(chuàng)建標(biāo)簽
git tag xxx1 xxx2xxx1是標(biāo)簽的名字,eg:v1.0,xxx2是commit id
情況三:創(chuàng)建帶有說(shuō)明的標(biāo)簽
git tag -a xxx1 -m "xxx2" xxx3xxx1是標(biāo)簽名,xxx2是說(shuō)明,xxx3是commit id可選
查看標(biāo)簽列表
git tag?顯示標(biāo)簽列表,標(biāo)簽不是按時(shí)間順序列出,而是按字母排序的
查看標(biāo)簽信息
git show xxxxxx是標(biāo)簽名
刪除標(biāo)簽
情況一:刪除本地標(biāo)簽?
git tag -d xxxxxx是標(biāo)簽名
情況一:刪除遠(yuǎn)程標(biāo)簽
1、先刪除本地標(biāo)簽?
git tag -d xxx2、再刪除遠(yuǎn)程標(biāo)簽
git push origin :refs/tags/xxxxxx是標(biāo)簽名
推送標(biāo)簽
情況一:推送指定標(biāo)簽到遠(yuǎn)程
git push origin xxx?xxx是標(biāo)簽名
情況一:推送所有未推送的標(biāo)簽到遠(yuǎn)程
git push origin --tags?
轉(zhuǎn)載于:https://www.cnblogs.com/kunmomo/p/11364799.html
總結(jié)
以上是生活随笔為你收集整理的Git复习(十一)之常见命令用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Git复习(十)之常见报错和疑问
- 下一篇: Git复习(十二)之命令专场