創建版本庫
初始化一個Git倉庫,使用git init命令。
添加文件到Git倉庫,分兩步:第一步,使用命令git add <file>,可反復多次使用,添加多個文件;第二步,使用命令git commit,完成。git add把把文件修改添加到暫存區;git commit提交更改,就是把暫存區的所有內容提交到當前分支。每次修改,如果不add到暫存區,那就不會加入到commit中。
查看狀態
查看工作區的狀態,使用git status命令。
如果git status告訴有文件被修改過,用git diff可以查看修改內容。
使用git log查看版本庫現在的狀態。
版本回退
HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。
用git log可以查看提交歷史,以便確定要回退到哪個版本。
用git reflog查看命令歷史,以便確定要回到未來的哪個版本。
撤銷修改
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。git checkout其實是用版本庫里的版本替換工作區的版本
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。
刪除文件
命令git rm file用于刪除一個文件。如果一個文件已經被提交到版本庫,那么你永遠不用擔心誤刪,但是要小心,只能恢復文件到最新版本,你會丟失最近一次提交后你修改的內容。
創建與合并分支相關
查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>
創建+切換分支:git checkout -b <name>
合并某分支到當前分支:git merge <name>,合并分支時,加上--no-ff參數就可以用普通模式合并,合并后的歷史有分支,能看出來曾經做過合并,而fast forward合并就看不出來曾經做過合并。git merge --no-ff -m "merge with no-ff" dev 將dev分支以普通模式合并到當前分支
刪除分支:git branch -d <name>
查看分支合并圖:git log --graph
Bug分支
git stash 可以把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作:
首先確定要在哪個分支上修復bug,假定需要在master分支上修復,就從master創建臨時分支:
git checkout master
git checkout -b issue-101
修復完成后,切換到master分支,并完成合并,最后刪除issue-101分支:
git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101
git branch -d issue-101
回到dev分支干活
git checkout dev
git stash list // git stash list命令看看儲藏了那些stash
需要恢復到儲藏前,有兩個辦法:一是用git stash apply恢復,但是恢復后,stash內容并不刪除,你需要用git stash drop來刪除;
另一種方式是用git stash pop,恢復的同時把stash內容也刪了:
可以多次stash,恢復的時候,先用git stash list查看,然后恢復指定的stash,用命令:git stash apply stash@{x} // x為stash list 號
Feature分支
開發一個新feature,最好新建一個分支;
如果要丟棄一個沒有被合并過的分支,可以通過git branch -D <name>強行刪除。
添加遠程庫
本地git倉庫要關聯一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git;關聯后,使用命令git push -u origin master第一次推送master分支的所有內容;此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
從遠程庫克隆
要克隆一個倉庫,首先必須知道遠程倉庫的地址,然后使用git clone命令克隆。
Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快。
分支策略
master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合并到master上,在master分支發布1.0版本;你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。
多人協作
遠程倉庫默認名稱origin
查看遠程庫的信息:git remote
顯示更詳細的信息:git remote -v
推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上:git push origin master 將master分支推送至遠程庫的master,git push origin dev 將dev分支推送至遠程庫的dev
多人協作的工作模式通常為:
首先,可以試圖用git push origin branch-name推送自己的修改;
如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合并;
如果合并有沖突,則解決沖突,并在本地提交;
沒有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream branch-name origin/branch-name。
查看遠程庫信息,使用git remote -v;
本地新建的分支如果不推送到遠程,對其他人就是不可見的;
從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交;
在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;
建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name;
從遠程抓取分支,使用git pull,如果有沖突,要先處理沖突。
標簽管理
首先,切換到需要打標簽的分支上。
打標簽:git tag v1.0 默認標簽是打在最新提交的commit上。
查看所有標簽:git tag
找到歷史提交的commit id:git log --pretty=oneline --abbrev-commit
為commit id為6224937的commit打標簽:git tag v0.9 6224937
查看標簽信息:git show <tagname>
刪除標簽:git tag -d v0.1
推送標簽:git push origin v1.0
一次性推送全部尚未推送到遠程的本地標簽:git push origin --tags
刪除遠程標簽:先從本地刪除:git tag -d v0.9 再從遠程刪除:git push origin :refs/tags/v0.9
內容整理自網絡,如有侵權請聯系刪除。
聯系作者:簡書·DH_Fantasy 新浪微博·DH_Fantasy
版權聲明:自由轉載-非商用-非衍生-保持署名(CC BY-NC-ND 3.0)