git使用手冊

1、安裝git
運行git bash
2、建立版本庫(倉庫)reposity,並提交文件
 
#新建文件夾
mkdir learngit
cd learngit
#顯示當前目錄
pwd
#將目錄變爲git倉庫,生成 .git 文件(git用來跟蹤管理版本庫)
git init
#顯示文件夾中全部文件(包括隱藏文件)
ls -ah
#將文件添加到git倉庫,支持一次添加多個文件
git add reademe.txt
#將文件提交到倉庫,支持屢次添加,最後統一提交
git commit -m "create reademe.txt"
 
git commit命令中,-m後面輸入的是本次提交的說明,方便查閱。
 
3、修改文件
修改文件後:
 
#查看倉庫狀態,modified會告知那些文件修改了
git status
#查看修改內容
git diff
#添加
git add reademe.txt
#能夠再次查看倉庫狀態
git status
#提交
git commit -m "change file"
#再次查看倉庫狀態,此時爲 nothing to commit
 
4、時光機穿梭
一、版本回退
 
 #顯示從最近到最遠的提交日誌
git log
#已版本號的方式顯示提交日誌
git log --pretty=oneline
#回退到上一個版本
git reset --hard HEAD^
#回退到某一個版本(版本號能夠不寫完整)
git reset --hard 3628164
#查看歷史命令,以便回到過去版本後再恢復到將來的某個版本
git reflog
 
HEAD表示當前版本
HEAD^表示上一個版本
HEAD^^表示上上個版本
HEAD~100 表示第幾個版本
 
二、工做區和暫存區
①工做區:電腦中能看到的目錄。
②版本庫:工做區中有一個隱藏的目錄 .git,這個不算是工做區,而是git的版本庫。
③暫存區:又稱state,存在於版本庫中。
④分支:存在於版本庫中,git會默認建立一個master分支。
⑤指針:又稱HEAD,存在於版本庫中,默認指向master分支。
 
git add命令就是將文件添加到暫存區,git commit就是將暫存區的全部文件,一次提交到HEAD指向的分支上。所以,文件修改必須先add到暫存區,再commit到倉庫。
git add 和 git commit是將修改分別同步到暫存區和倉庫,並不會將暫存區的內容清除。
若是一個文件不曾被添加到暫存區過,則git status查看倉庫狀態時,此文件爲 untracked。
 
#對比工做區和暫存區的不一樣
git diff
#對比暫存區和分支的不一樣
git diff --cached
 
三、撤銷修改
 
#將文件回退到最近一次git commit 或git add時的狀態
git checkout -- reademe.txt
-- file 很重要,若是沒有就變成了另外一個「切換到另外一個分支」的命令。
 
四、刪除文件
 
#刪除本地文件
rm test.txt
#從版本庫恢復刪除文件
git checkout -- test.txt
#從版本庫刪除
git rm test.txt
 
不管是修改仍是刪除,git checkout 實際上是用版本庫中的版本替換工做區的版本。
 
5、分支管理
一、分支操做
 
#查看分支,其中帶*爲當前分支
git branch
#建立分支,建立的分支與當前分支內容一致
git branch <name>
#切換分支
git checkout <name>
#建立+切換分支
git checkout -b <name>
#合併某分支到當前分支
git merge <name>
#刪除分支
git branch -d <name>
#查看分支合併圖
git log --graph
 
HEAD永遠指向當前分支,合併分支實際是將當前分支指向要合併的分支的指向。
當git沒法自動合併分支時,必須先解決衝突。衝突解決後,再提交,合併完成。
 
二、分支合併模式
Fast forward模式:一般合併分支時,若是可能,git會用Fast forward模式,這種模式下,刪除分支,會丟掉分支信息。
普通模式:用--no-ff 禁用Fast forward模式,git會在merge時生成一個新的commit,這樣從分支歷史上就能看到分支的信息。
 
#合併分支,並建立一個新的commit,全部用-m參數,添加版本描述
git merge --no-ff -m "merge with no-ff" dev
#查看分支歷史
git log
三、分支策略
master分支:應該是很是穩定的,也就是僅用來發布新版本,平時不能在此分支開發。
dev分支:用於平時開發,是不穩定的,等到發佈新版本時,再合併到master上。
每一個開發者都在dev分支進行開發,那每一個人都有本身的分支,再時不時的往dev上合併便可。
四、bug分支
舉個栗子:
若是在master分支上有一個代號爲101的bug,可是你在dev分支上的開發尚未完成,不能提交。那如何完成bug修改,而且不影響現有開發?
第一步:保存工做現場
#把當前工做現場「儲藏」起來,等之後恢復現場後繼續工做
git stash
#stash後,git status查看工做區就是乾淨的,能夠放心的建立分支
git status
 
第二步:修改bug
#肯定在哪一個分支上修復bug,即切換到哪一個分支
git checkout master
#從 master分支建立臨時分支,並切換
git checkout -b "issue-101"
#修復完成後,提交,此時提交到issue-101分支
git add reademe.txt
git commit -m "fix bug 101"
#測試端bug驗證完後,切換到master分支,完成合並刪除issue-101
git checkout master
git merge -no-ff -m "merged bug fix 101" issue-101
git branch -d issue-101
 
第三步:恢復現場
#修改完bug了,如今恢復dev的工做區
git checkout dev
#此時工做區仍是乾淨的
git status
#查看stash list 工做現場的保存
git stash list
#兩種恢復工做現場方法
#第一:恢復後,stash內容不刪除,再手動刪除
git stash apply
#刪除stash內容
git stash drop
#第二種:恢復的同時,刪除stash內容
git stash pop
 
切換分支及建立分支時,要保證工做區的狀態是乾淨的,即都當前修改均已提交到git倉庫。由於,切換分支後,未提交倉庫的修改將不被保留。
 
五、feature分支
feature:開發中用於開發新功能的分支。
 
#新建分支
git checkout -b feature-1
#開發完畢後,提交
git add reademe.txt
git commit -m "add feature-1"
#合併到dev分支
git checkout dev
git merge --no-ff -m "fix feature-1" feature-1
#若開發過程當中,新功能取消,刪除未合併的分支
git branch -D feature-1
 
六、多人協做
 
#查看遠程庫信息,遠程庫的名稱默認origin
git remote
#遠程庫更詳細信息,抓取和推送的遠程地址
git remote -v
#推送分支,指定本地分支,會將該分支全部本地提交到遠程庫對應分支上
git push origin master
 
master:主分支,要時刻與遠程同步
dev:開發分支,團隊全部成員都需在上面工做,因此須要遠程同步
bug:只用於本地修復bug,不必推到遠程
feature:是否推到遠程,取決於你是否與你的小夥伴合做開發
 
#抓取分支
#克隆
git clone git@github.com:michaelliao/learngit.git
#從遠程庫clone時,只能看到本地的master分支
#查看分支
git branch
#想要在dev分支開發,必須建立遠程origin的dev分支到本地
git checkout -b dev origin/dev
#開發工程中是否是把dev分支push到遠程
git add reademe.txt
git commit -m "add"
git push origin dev
#若是同時修改同一文件,push失敗,就要先pull
git pull
#若是pull失敗,緣由爲沒有指定本地dev與遠程origin/dev的連接,「no tracking information」
git branch --set-upstream dev origin/dev
#再pull
git pull
#解決完衝突,再提交,上傳
 
6、標籤管理
標籤:發佈一個版本是,一般在版本庫中打一個標籤tag,實際上是指向某個commit的指針,(分支也是指向commit的指針,可是分支能夠移動,標籤不能),標籤跟某個commit綁定在一塊兒,爲了方便查找某個固定的版本,如使用標籤tag v1.2 ,而不是使用某個commit 6a5819e。
一、建立標籤
 
#切換到須要打標籤的分支
git checkout master
#打一個新標籤,默認標籤是打在最近的commit上
git tag v1.0
#對歷史commit,打標籤
git tag v0.9 6224937
#查看全部標籤,標籤按字母排序
git tag
#查看標籤詳情
git show v0.9
#建立帶有說明的標籤,-a指定標籤名,-m指定說明
git tag -a v0.1 -m "version 0.1 released" 32534344
 
二、操做標籤
#刪除標籤
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
 
7、自定義git
一、.gitignore文件
添加忽略文件
 
二、配置別名
例如: --global 是全局參數,也就是這些命令能夠在這臺電腦的全部git倉庫下應用
 
#git status -> git st
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
#git reset HEAD file將暫存區的修改撤銷,即unstage,至關於將工做區將文件git add的這邊操做撤回,工做區仍保持不變
git config --global alias.unstage 'reset HEAD'
#使用別名
git unstage test.txt
#顯示最後一次提交信息
git config --global alias.last 'log -1'
#使用不一樣顏色顯示log信息
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
 
每一個倉庫的配置都放在 .git/config 文件中,別名再【alias】後面,若是要刪除別名,直接把對應的行刪掉便可。
 
相關文章
相關標籤/搜索