一、概念git reflog
二、常用命令
- 命令:
git init
,將目錄變成Git可以管理的倉庫 - 命令:
git add
,將文件添加到Git倉庫,可以多次添加 - 命令:
git commit -m<message>
,將文件提交,只需一次提交 - 命令:
git log
,顯示最近到最遠的提交日誌(–pretty=onelint,將多行合併一行) - 命令:
git reset --hard HEAD^
,回到上一個版本,在git中,HEAD表示當前版本,上一個版本就是HEAD^,上上個版本就是HEAD^^,如果是多個則使用HEAD~10(回到前10個版本) - 命令:
git reflog
,記錄每次操作命令 - 命令:
git reset --hard commit_id
,回到指定版本 - 命令:
git diff HEAD -- <file>
,查看文件工作區版本和庫中最新版本的區別
三、工作區和暫緩區關係
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
四、撤銷修改
- 場景1:當改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令:
git checkout -- file
- 場景2:當不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令:
git reset HEAD <file>
,就回到場景1的情況,再安裝場景1處理 - 場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參版本回退方法(前提是沒有推送到遠程庫)
五、刪除文件
git checkout -- test.txt
其實是用版本庫裏的版本替換工作區的版本,無論工作區的是修改還是刪除,都可以“一鍵還原”git rm
用於刪除一個文件。如果一個文件已經被提交到版本庫,那麼永遠不用擔心誤刪,但要消息,只能恢復文件到最新的版本,會丟失最近一次提交後修改的內容
六、創建密鑰
ssh-keygen -t rsa -C "[email protected]"
然後輸入文件名id_rsa,連續空格鍵,在git包下即可找到id_rsa.pub文件裏既是密鑰
七、推送到遠程服務
- 把本地master分支的最新修改推送至GitHub,命令:
git push origin master
- 克隆遠程服務,例:
git clone [email protected]:michaelliao/gitskills.git
八、創建與合併
- 分支創建:
git checkout -b <name>
,在git checkout命令上添加-b參數表示創建並切換,name分支名 - 查看所有分支,
git branch
,當前分支前會有“*” - 合併分支,
git merge <name>
,合併指定分支到當前分支 - 刪除分支,
git branch -d <name>
- 查看分支合併圖,
git log --graph --pretty=online --abbrev-commit
九、分支管理策略
- Fast forward模式下,刪除分支後會丟掉分支信息。
git merge --no-ff -m<message>
:表示禁用該Fast forward模式
十、Bug分支
2.Git還提供了一個stash功能,可以把當前工作現場“儲藏”起來,等以後恢復現場後繼續工作,git stash
2. git stash list
查看工作現場位置
3. 恢復工作現場方法,一種:git stash apply
,恢復後,stash內容並不刪除,你需要用git stash drop
來刪除;另一種:git stash pop
,恢復的同時把stash刪除
十一、新功能
- 在開發一個新的feature,最好新建一個分支;如果要丟棄一個沒有被合併過的分支,可以通過
git branch -D <name>
強行刪除
十二、多人協作
當從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來,並且,遠程倉庫的默認名稱時origin。查看遠程庫信息,使用命令:git remote
,或者git remote -v
顯示更詳細的信息
2. 推送分支git push origin master
,如果推送其他分支,比如dev,git push origin dev
十三、抓取分支
默認情況下,只能看到本地master分支,要在dev分支上開發,就必須遠程創建origin的dev分支到本地,命令:git checkout -b branch-name origin/branch-name
例:git checkout -b dev origin/dev
- 本地新建的分支如果不推送到遠程,對其他人就是不可見的
- 從本地推送分支,使用
git push origin branch-name
,如果推送失敗,先用git pull
抓取遠程的新提交,如果抓取失敗,則需要建立本地分支與遠程分支的鏈接git branch --set-upstream branch-name origin/branch-name
- rebase操作可以把本地未push的分叉提交歷史整理成直線,
git rebase
十四、標籤
- 查看標籤信息,命令
git show <tag-name>
- 刪除本地標籤,命令:
git tag -d <tag-name>
, - 如果要推送某個標籤到遠程,使用命令:
git push origin <tag-name>
,或者,一次性推送全部尚未推送到遠程的本地標籤:git push origin --tags
- 如果標籤已經推送到遠程,要刪除,則先刪除本地:
git tag -d <tag-name>
,然後刪除遠程:git push origin :refs/tags/<tag-name>
十五、關聯遠程庫
- 命令:
git remote add origin [email protected]:用戶名/項目名.git