
git使用
Git學(xué)習(xí)推薦廖雪峰老師的Git教程
安裝之后設(shè)置
- 設(shè)置用戶名和郵箱
設(shè)置或者更改用戶名和郵箱地址
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
查看用戶名和郵箱地址
$ git config --global user.name
$ git config --global user.email
- 創(chuàng)建一個版本庫(倉庫repository)
打開Git Bash 在自己想要的目錄下創(chuàng)建
$ cd xxxx
$ git init
Initialized empty Git repository in E:/repository/img/.git/
# git init 用于把當(dāng)前目錄變成一個可以管理的倉庫
- 把文件放到Git倉庫
在當(dāng)前目錄下游一個.git的目錄。此目錄是用來跟蹤管理版本庫的,不能亂改
在管理的目錄或者子目錄建立一個文件(git只能管理這里面的文件)。 把文件放到Git倉庫只需兩步
-
git add xxx告訴Git,把文件添加到倉庫 xxx 為文件可以是多個文件 提交到暫存區(qū) -
git commit -m告訴Git,把文件提交到倉庫 -m 為提交說明 提交到分支 - 兩個一起就是提交到倉庫
- 常用命令
git status 查看結(jié)果(查看文件的狀態(tài))
git diff 查看文件的修改內(nèi)容
git log 查看當(dāng)前版本和此版本修改之前的歷史記錄
git log --pretty=oneline 一行顯示
git reset --hard HEAD^ 回退到上一個版本 HEAD表示是當(dāng)前版本 HEAD^^上上個版本 HEAD~(number)回退到第number個版本
git reflog 打印對分支的更改記錄 (可以用來記錄之前commit命令的commit id)
git reset --hard commit id 重新回到commit id 的新版本 這兩個命令用于還原之前被回退的版本
Git的版本回退速度非常快,因?yàn)镚it在內(nèi)部有個指向當(dāng)前版本的HEAD指針,當(dāng)你回退版本的時候,Git僅僅是把HEAD從指向append GPL:
工作區(qū)(Working Directory)
就是你在電腦里能看到的目錄
版本庫(Repository)
工作區(qū)有一個隱藏目錄.git,這個不算工作區(qū),而是Git的版本庫。
Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動創(chuàng)建的第一個分支master,以及指向master的一個指針叫HEAD。
git checkout --file 撤銷修改(未添加到暫存區(qū))現(xiàn)在一般用 git restore
如果要撤銷修改add過的文件可以使用git reset HEAD file 重新回到工作區(qū)再調(diào)用git checkout --file 丟棄工作區(qū)的修改
git reset命令既可以回退版本,也可以把暫存區(qū)的修改回退到工作區(qū)。當(dāng)我們用HEAD時,表示最新的版本。
新版本的另一個種修改方法
| 命令 | 作用 | 備注 |
|---|---|---|
| git restore --worktree file | 表示撤銷file文件工作區(qū)的修改 | 參數(shù)等同于-W |
| git restore --staged file | 表示插銷暫存區(qū)的修改,將文件狀態(tài)恢復(fù)到add之前 | 參數(shù)等同于-S |
| git restore -s HEAD~1 README.md | 表示將當(dāng)前工作區(qū)切換到上個 commit 版本 | |
| git restore -s dbv213 README.md | 表示將當(dāng)前工作區(qū)切換到指定 commit id 的版本 | |
| git restore file | 撤銷工作區(qū)的修改返回這里有兩種情況一是修改沒有放進(jìn)暫存區(qū)撤銷就和版本庫中一模一樣,二是存放進(jìn)了暫存區(qū)撤銷撤銷就是回到暫存區(qū)后的狀態(tài) |
刪除文件也是一種修改
如果在工作去刪除了文件有兩個選錯,一是確定從倉庫中刪除文件git rm file并且git commit -m 二是誤刪想恢復(fù)可以用 git checkout --file或者git restore file
-
創(chuàng)建SSH key 將GitHub作為自己的remote端服務(wù)器
第一步:在用戶主目錄下,查看有么有.ssh目錄,再看看這個目錄下有么有SSH Key秘鑰對id_rsa和id_rsa.pub兩個文件
第二步 如果有進(jìn)入下一步,沒有打開Sell(Windows打開Git Bash),創(chuàng)建SSH Key;$ ssh-keygen -t rsa -C "youremail@example.com"
代碼參數(shù)含義:
-t 指定密鑰類型,默認(rèn)是 rsa ,可以省略。
-C 設(shè)置注釋文字,比如郵箱。
-f 指定密鑰文件存儲文件名。以上代碼省略了 -f 參數(shù),因此,運(yùn)行上面那條命令后會讓你輸入一個文件名,用于保存剛才生成的 SSH key 代碼,如:
Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
當(dāng)然,你也可以不輸入文件名,使用默認(rèn)文件名(推薦),那么會生成id_rsa(私鑰不能泄露出去)和id_rsa.pub(公鑰,可以放心地告訴任何人)兩個秘鑰文件
接著又會提示你輸入兩次密碼(該密碼是push文件的時候要輸入的密碼而不是gihub管理者的密碼)當(dāng)然,也可以不輸入密碼,直接按回車。那么在push的時候就不需要輸入密碼,直接提交到GitHub上
第三步:添加SSH Key到github上面去
登上GitHub,打開Settings, SSh and GPG keys頁面然后,點(diǎn)擊new SSH Key ,天上任一Title,在Key文本框里把id_rsa.pub的內(nèi)容復(fù)制到這里。
為什么GitHub需要SSH Key呢?因?yàn)镚itHub需要識別出你推送的提交確實(shí)是你推送的,而不是別人冒充的,而Git支持SSH協(xié)議,所以,GitHub只要知道了你的公鑰,就可以確認(rèn)只有你自己才能推送。
在github上創(chuàng)建一個倉庫,把本地倉庫的內(nèi)容推送到GitHub倉庫git push 倉庫名 分支
git remote add origin git@github.com:hwb5522/learn.git
git push -u origin master以后只需要git push origin master
在github克隆遠(yuǎn)程倉庫git clone
git clone git@github.com:hwb5522/gitskills.git
要克隆一個倉庫,首先必須知道倉庫的地址,然后使用git clone命令克隆。
- 分支
查看分支git branch
創(chuàng)建分支git branch <name>
切換分支git checkout <name>或者git switch <name>
創(chuàng)建+切換分支:git checkout -b <name>或者git switch -c <name> 合并某分支到當(dāng)前分支git merge <name>刪除分支:git branch -d <name>`
解決合并沖突:就是把Git合并失敗的文件手動編輯為我們希望的內(nèi)容,再提交。
用git log --graph命令可以看到分支合并圖。
git log --graph --pretty=oneline --abbrev-commit
通常,合并分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支后,會丟掉分支信息。
如果要強(qiáng)制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。
$ git merge --no-ff -m "merge with no-ff" dev
git stash把當(dāng)前工作現(xiàn)場“儲藏”起來,等可以以后恢復(fù)現(xiàn)場后繼續(xù)工作
git stash list 查看“儲藏”的工作現(xiàn)場
恢復(fù)方法:git stash apply恢復(fù),在用git stash drop 刪除;另一種是:git stash pop 恢復(fù)的同事吧stash內(nèi)容也刪除了
- 修復(fù)bug
通常創(chuàng)建新的bug分支進(jìn)行修復(fù),然后合并,最后刪除分支;
當(dāng)手頭工作沒有完成時,先把工作現(xiàn)場git stash一下,然后去修復(fù)bug,修復(fù)后,再git stash pop,回到工作現(xiàn)場;
在master分支上修復(fù)的bug,想要合并到當(dāng)前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“復(fù)制”到當(dāng)前分支,避免重復(fù)勞動。(commit為修改bug的分支提交修改的commit id)
- Feature分支
開發(fā)一個新功能最好新建一個分支,如果要丟棄一個沒有被合并過的分支,可以通過git branch -D <name> 強(qiáng)行刪除。
- 多人協(xié)作
當(dāng)你從遠(yuǎn)程倉庫克隆時,實(shí)際上Git自動把本地的master分支和遠(yuǎn)程的master分支對應(yīng)起來了,并且,遠(yuǎn)程倉庫的默認(rèn)名稱是origin。
要查看遠(yuǎn)程庫的信息,用git remote或者用git remote -v顯示更詳細(xì)的信息
推送分支:把該分支上的所有本地提交推送到遠(yuǎn)程庫,推送時要指定分支這樣,Git就會把該分支推送到遠(yuǎn)程庫對應(yīng)的遠(yuǎn)程分支上git push origin master
如要推送其他分支,比如dev
git push origin dev
從遠(yuǎn)程庫clone時,默認(rèn)情況下,只能看到本地的master分支。如果要在dev分支上開發(fā)就必須創(chuàng)建遠(yuǎn)程的origin的dev分支到本地,使用命令git checkout -b dev origin/dev
現(xiàn)在就可以在dev上繼續(xù)修改然后把dev分支push到遠(yuǎn)程
- 標(biāo)簽管理
- 命令git tag <tagname>用于新建一個標(biāo)簽,默認(rèn)為HEAD,也可以指定一個commit id;
- 命令git tag -a <tagname> -m "blablabla..."可以指定標(biāo)簽信息;
- 命令git tag可以查看所有標(biāo)簽。
- 命令git show <tagname> 查看標(biāo)簽的信息
- 命令git push origin <tagname>可以推送一個本地標(biāo)簽;
- 命令git push origin --tags可以推送全部未推送過的本地標(biāo)簽;
- 命令git tag -d <tagname>可以刪除一個本地標(biāo)簽;
- 命令git push origin :refs/tags/<tagname>可以刪除一個遠(yuǎn)程標(biāo)簽。