在工作中接觸git已經(jīng)快一年半了,真的是一款強大便捷的版本管理工具。常用的一些命令已經(jīng)很熟,偶爾用到不常用的功能就搜一下,現(xiàn)在想系統(tǒng)性的看一遍git的教程,并想把一些平時使用時候有點疑惑的地方整理一下,方便以后工作中能夠更好的利用git。
創(chuàng)建倉庫:
到需要創(chuàng)建倉庫的路徑輸入命令:git init
創(chuàng)建完成后,會出現(xiàn)一個.git的目錄,這個就是跟蹤和管理各個版本的本地倉庫
版本回退
查看日志
查看當前和之前版本更新日志:git logorgit log --pretty=onelinefor short
查看每次commit的版本號(commit id):git reflog
查看分支合并圖:
git log --graph
git log --graph --pretty=oneline --abbrev-commit回歸歷史版本
回滾到上一個版本命令:
git reset --hard HEAD^
git中HEAD表示當前版本,上一個版本是HEAD^,上上一個版本為HEAD^^
當然往上n個版本寫n個^比較容易數(shù)不過來,所以寫成HEAD~n穿梭版本
回滾到以前的版本后,又想回到較新的某個版本
git reset --hard <commit_id>
工作區(qū)和暫存區(qū)概念
工作區(qū)Work Directory:就是git倉庫所在路徑
版本庫Repository: .git目錄不是工作區(qū),里面為版本庫,其中包括暫存區(qū)stage和當前分支master。

往git版本庫添加的時候,分兩步執(zhí)行:1.
git add 添加到暫存區(qū); 2. git commit 添加到當前分支。
查看不同
查看工作區(qū)與暫存區(qū)的不同: git diff
查看工作區(qū)與當前分支的不同: git diff HEAD --<filename>
撤銷修改
撤銷工作區(qū)的修改:
git checkout --<filename> 文件恢復(fù)到第一次git commit或者git add的狀態(tài)
撤銷暫存區(qū)的修改:
git reset HEAD <filename>可以把暫存區(qū)添加的修改撤銷掉,把暫存區(qū)的修改退回到工作區(qū)
關(guān)聯(lián)遠程倉庫
- 關(guān)聯(lián)到github
由于本地git倉庫與遠程倉庫通過SSH加密傳輸,可能需要設(shè)置SSH
主目錄下查看.ssh目錄,目錄下若沒有id_rsa和id_rsa.pub這兩個文件,
則執(zhí)行下面第一步,否則跳過第一步
第一步:ssh-keygen -t rsa -C "youremail@example.com"
第二步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面,然后,點“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容
git remote add origin <remote git>其中,origin為遠程庫的名字
把本地更新推送到遠程庫:
git push -u origin master第一次推送用-u參數(shù),將本地master與origin master關(guān)聯(lián)起來。后續(xù)使用git push即可 - 刪除/替換遠程倉庫
將某個工程向現(xiàn)在的倉庫強制推送即可
git remote add origin <remote git>
git push --force --set-upstream origin master
分支
master是穩(wěn)定的,僅用來發(fā)布新版本,平時不再上面干活
干活是在分支上,分支是不穩(wěn)定的,等穩(wěn)定了再合并到master上。

- 創(chuàng)建并切換分支
例、創(chuàng)建分支dev,并且切換HEAD到dev
git checkout -b dev
上述命令-b dev創(chuàng)建并且切換到dev等價于下述兩個命令:
git branch dev
git checkout dev - 查看本地所有分支列表
git branch
當前分支會在分支名前標一個*號 - 合并分支(例、合并當前分支和dev分支)
git merge dev
合并分支會丟掉dev相關(guān)信息,若想保留dev相關(guān)信息,可以merge時使用--no-off,并且添加-mcommit信息
git merge --no-ff -m "merge with no-ff" dev - 刪除分支(例、刪除dev分支)
git branch -d dev
強制刪除未合并分支
git branch -D dev - bug分支
假設(shè)在dev分支開發(fā)的時候,突然有個bug需要修改,需要切換到master,然后再建立bug分支,修復(fù)bug后將master和bug分支合并。期間,dev分支的內(nèi)容需要放到某個地方暫存,用到git stash語句
然后切換回來后,用git stash list查看暫存修改列表。
git stash pop將暫存的修改恢復(fù)到工作區(qū),并且清空stash列表 - 從本地推送分支
git push origin <branch-name>
若推送失敗,先git pull抓取遠程新提交 - 關(guān)聯(lián)本地與遠程分支
git branch --set-upstream branch-name origin/branch-name
創(chuàng)建并關(guān)聯(lián)
git branch -b <branch-name> origin/<branch-name>本地與遠程分支名字最好一樣·
標簽管理
- 創(chuàng)建tag
git tag <tag name>
git tag <tag name> <commit id>
git tag -a <tag name> -m <message> <commit id>創(chuàng)建標簽并且添加標簽信息 - 查看tag
git show <tag name> - 推送本地標簽
git push origin <tag name>推送指定標簽
git push origin --tags推送所有本地標簽 - 刪除本體/遠程標簽
git tag -d <tag name>刪除本地標簽
git push origin :refs/tags/<tagname>刪除遠程標簽(先刪除本地,再刪除遠程)