git init
使用當(dāng)前目錄作為git倉庫
git add
git add <file>將該文件添加到緩存區(qū),如果需要添加所有的文件用git add .
git commit
使用git commit -m " "將緩存區(qū)的內(nèi)容添加到版本庫狞洋," "中填寫本次的提交說明
git commit -am " " = git add . + git commit -m " "
git status
通過git status可以看到當(dāng)前所處的分支淫痰,以及本地倉庫最新更改的文件狀態(tài)
Changes not staged for commit以及no changes added to commit表示有修改的文件但是并沒有準(zhǔn)備提交的修改病瞳,此時(shí)若是我們需要提交該文件践惑,需要先git add <file>再git commit
Changes to be committed表示文件已經(jīng)添加到了暫存區(qū)慎颗,但是還沒提交
nothing to commit, working tree clean表示沒有需要提交的修改乡恕,工作目錄干凈
git diff
通過git diff加文件名可以查看文件具體修改了哪些內(nèi)容
git log
通過git log可以查看之前每次提交的作者、時(shí)間以及提交說明
使用git log --pretty=oneline可以看到每次提交的commit id(版本號(hào))以及提交說明哗总,使用q退出
git reset
通過git reset --hard HEAD^ 可以實(shí)現(xiàn)版本的回退几颜,HEAD表示當(dāng)前版本,HEAD^ 表示上一個(gè)版本讯屈,如果想回退到上上個(gè)版本用HEAD^^ ,^ 個(gè)數(shù)過多可以用數(shù)字表示县习,如HEAD^50
也可以直接使用git reset --hard + 版本號(hào)實(shí)現(xiàn)版本的回退或是回退后的恢復(fù)涮母,版本號(hào)通過git log --pretty=oneline可以得到,使用時(shí)只用輸入前幾位的版本號(hào)即可
如果文件添加到了暫存區(qū)躁愿,但是想丟棄該暫存區(qū)中的修改可以用git reset HEAD <file>
git reflog
通過git reflog可以看到自己每一次操作的命令叛本,也可以用于來查找之前某次版本回退前的版本號(hào)
git cheackout --
使用git checkout -- <file>可以在文件在工作區(qū)的修改撤銷。分2種情況:
- 文件修改后沒有放到暫存區(qū)彤钟,那么會(huì)撤銷到版本庫的狀態(tài)来候。包括如果文件誤刪了,但是版本庫中有也可以使用
- 文件添加到了暫存區(qū)逸雹,但是又做了修改营搅,那么會(huì)撤回到暫存區(qū)保存的狀態(tài)
使用git checkout HEAD會(huì)用HEAD指向的master分支的文件替換暫存區(qū)以及工作區(qū)中的文件
git checkout
git checkout + 分支的名字表示切換到該分支上
git checkout -b + 分支的名字表示創(chuàng)建該分支并切換到該分支上
git rm
如果本地刪除了一個(gè)文件,希望版本庫中也同步刪除梆砸,先git rm <file>转质,再git commit -m " "
如果希望同步刪除本地和暫存區(qū)的文件用git rm -f <file>
如果希望刪除暫存區(qū)的,但保留本地的文件使用git rm --cached <file>
git remote
使用git remote可以查看遠(yuǎn)程庫的信息帖世,使用git remote -v可以顯示遠(yuǎn)程庫更詳細(xì)的信息
git clone
如果想把一個(gè)遠(yuǎn)程庫中的項(xiàng)目直接克隆到本地使用git clone <repo>休蟹,其中repo為git倉庫
git branch
查看當(dāng)前所有的分支,前面標(biāo)有*的是當(dāng)前所處的分支
git branch <branch_name>表示新建一個(gè)分支branch_name
git branch -d + 分支名字表示刪除該分支
git branch -D + 分支名字表示強(qiáng)行刪除一個(gè)還沒有被合并過的分支
git merge
當(dāng)前所處分支1,使用git merge +分支2時(shí)表示將分支2上的操作與分支1合并赂弓,即分支1中指向的提交變?yōu)榉种?的提交
如果需要保存分支2合并到了分支1中的信息绑榴,可以用git merge --no-ff -m " " + 分支2," "中填寫此次提交合并的說明盈魁,以用于保存
git log --graph
使用git log --graph可以看到各分支的合并圖
git stash
- 直接使用git stash可以將當(dāng)前未提交的工作區(qū)暫時(shí)保存
- 使用git stash apply可以恢復(fù)工作區(qū)翔怎,但stash中的內(nèi)容不刪除
- 使用git stash pop可以恢復(fù)工作區(qū)并刪除stash中的內(nèi)容
- 使用git stash drop可以刪除stash中的內(nèi)容
- 使用git stash list可以查看stash中保存的內(nèi)容,若多次stash备埃,可以在查看后選擇恢復(fù)指定的內(nèi)容
git push
使用git push origin master可以將本地版本庫中的項(xiàng)目推送到遠(yuǎn)程庫中姓惑,origin為遠(yuǎn)程庫,master為版本庫的分支按脚,如果需要push其他分支可以將master改為其他分支于毙,默認(rèn)push到遠(yuǎn)程庫上的是關(guān)聯(lián)的分支,可以使用git branch --set-upstream-to=origin/branch-name branch-name進(jìn)行關(guān)聯(lián)
git rebase
若此時(shí)有2個(gè)分支
A,B,C為之前的提交辅搬,模塊D為遠(yuǎn)程分支origin上的提交唯沮,F(xiàn)、E為本地分支work的提交堪遂,此時(shí)若是要提交介蛉,首先需要將模塊D和模塊F合并,使用git merge可以得到
為模塊D和模塊F合并的模塊溶褪,work分支上的模塊G币旧,在push前origin分支上是模塊D,此時(shí)若是我們用git log --graph查看會(huì)出現(xiàn)一個(gè)閉合猿妈,不易操作和查看
但是使用git rebase后吹菱,可以得到
模塊F'為合并后的模塊,work分支上是模塊F'彭则,在push前origin分支上是模塊D鳍刷,原來模塊E、F提交會(huì)被git rebase取消俯抖,然后保存為補(bǔ)丁patch
rebase的過程中也會(huì)出現(xiàn)沖突输瓜,需要去解決,解決完沖突后芬萍,用git add去更新尤揣,然后無需git commit,直接git rebase --continue担忧,git就會(huì)繼續(xù)應(yīng)用余下的補(bǔ)丁
當(dāng)需要終止rebase的行動(dòng)時(shí):git rebase --abort芹缔,本地分支會(huì)回到開始時(shí)的狀態(tài)
使用rebase可以可以最大程度保證origin代碼不會(huì)被錯(cuò)誤修改
git fetch
從遠(yuǎn)程獲取更新的最新的內(nèi)容到本地,但不進(jìn)行合并
git pull
git pull = git fetch + git merge
git pull -r = git fetch + git rebase
git tag
- 切換到一個(gè)分支后瓶盛,使用git tag <tagname>即可對(duì)該分支最新提交的commit打上該標(biāo)簽最欠,如果還需要做有說明的標(biāo)簽的話示罗,用git tag -a <tagname> -m " "," "內(nèi)填寫說明
- 如果想對(duì)之前某次的提交打上標(biāo)簽芝硬,可以先用git log --pretty=oneline找到該提交的commit-id蚜点,然后使用git tag <tagname> commit-id即可
- 使用git tag可以看到所有的標(biāo)簽列表,使用git show <tagname>可以查看某一標(biāo)簽的信息
- 標(biāo)簽可以用git tag -d <tagname>進(jìn)行刪除
- 標(biāo)簽可以用git push origin <tagname>推送到遠(yuǎn)程拌阴,也可以用git push origin --tags把所有未推送的標(biāo)簽全部推送
- 如果希望刪除一個(gè)遠(yuǎn)程的標(biāo)簽绍绘,先用git tag -d <tagname>刪除本地的標(biāo)簽,再用git push origin :refs/tags/<tagname>進(jìn)行遠(yuǎn)程刪除