【git教程】
http://www.liaoxuefeng.com/ (廖雪峯博客)
http://rogerdudler.github.io/git-guide/index.zh.html (Git簡明教程)
【常用命令】
PS:在MacOS系統環境下的git命令。
工作流
你的本地倉庫由 git 維護的三棵“樹”組成。
> 工作區,它持有實際文件夾。
> 暫存區(Stage),它像個緩存區域,臨時保存你的改動。
> HEAD,它指向你最後一次提交的結果。
配置本機git的用戶名和郵箱 | config
在剛剛在本機安裝完git後,需要配置的信息。
git config --global user.name "shahdza" git config --global user.email [email protected] |
初始化git倉庫 | init
# 創建文件夾,並進入 Demo 目錄 mkdir Demo cd Demo # 初始化git倉庫(將 Demo 文件夾變成git倉庫) git init |
添加並提交 | add、commit
都是在本地的git倉庫進行操作,不會改動遠程倉庫的版本。
# 添加文件到倉庫(放在暫存區) git add readme.txt git add * # 提交添加到暫存區的文件到倉庫 git commit -m "提交信息" |
克隆倉庫 | clone
# 克隆遠程倉庫到本地倉庫 git clone https://github.com/shahdza/Demo.git # 克隆本地倉庫到本地另一個路徑 git clone /localpath |
遠程推送 | remote、push
# 將本地倉庫與一個遠程庫關聯 git remote add origin https://github.com/shahdza/Demo.git # 第一次推送master分支的所有內容 git push -u origin master # 推送最新修改內容到master分支(也可以推送其它分支) git push origin master |
查看提交信息 | status、diff、log、reflog
# 查看倉庫當前狀態 git status # 查看文件被修改過的內容(在還未commit時,工作區和本地git倉庫的差異) git diff readme.txt # 查看從最近到最遠的提交歷史 ## 注意:比如有100個版本,通過reset回退到了第50個版本,那麼log只會顯示1~50的提交日誌 ## 會顯示版本號、提交日期、提交信息 git log git log --pretty=oneline # 查看操作命令的歷史(記錄了每一次的操作命令) git reflog |
版本回退 | reset --hard
# 上一個版本、上上個版本、往上100個版本 git reset --hard HEAD^ git reset --hard HEAD^^ git reset --hard HEAD~100 # 回退到指定版本(通過版本號) git reset --hard 3628164 |
丟棄工作區的修改 | checkout --
# 一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態; # 一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。 # 總之,就是讓這個文件回到最近一次[git commit]或[git add]時的狀態。 git checkout -- readme.txt |
撤銷暫存區的修改(unstage),重新放回工作區 | reset HEAD
# 執行後,暫存區是乾淨的,工作區有修改 git reset HEAD readme.txt |
刪除倉庫中的某個文件(工作區文件也會刪除) | rm
# 刪除文件會放入暫存區,可以使用[git reset HEAD file]和[git checkout -- file]撤銷刪除 git rm readme.txt |
分支管理 | branch
# 創建分支 git branch <name> # 切換分支 git checkout <name> # 創建+切換分支 git checkout -b <name> # 合併某分支到當前分支 git merge <name> # 刪除分支 git branch -d <name> # 強行刪除 git branch -D <name> # 查看分支 git branch # 查看分支合併圖 git log --graph --pretty=oneline |
標籤管理 | tag
# 給分支打上標籤 ## 當前版本打上標籤 git tag v1.0 ## 某個版本打上標籤 git tag v0.9 6224937 # 推送標籤到遠程倉庫 ## 推送某個標籤 git push origin <tagname> ## 推送所有標籤 git push origin --tag # 刪除標籤 git tag -d v0.1 # 刪除遠程標籤 ## 需要先本地刪除,然後再遠程刪除 git tag -d v0.9 git push origin :refs/tags/v0.9 # 查看所有標籤 git tag # 查看某個標籤信息 git show <tagname> |
忽略特殊文件 | .gitignore
1、在 Git工作區的根目錄創建一個特殊的 .gitignore 文件。
2、在 .gitignore 文件中,添加需要忽略的文件。
3、特殊文件大全:https://github.com/github/gitignore
例如:編寫Unity3D項目的 .gitignore 文件
=============== Unity generated =============== Temp/ Library/ ===================================== Visual Studio / MonoDevelop generated ===================================== ExportedObj/ obj/ *.svd *.userprefs /*.csproj *.pidb *.suo /*.sln *.user *.unityproj *.booproj ============ OS generated ============ .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes ehthumbs.db Thumbs.db
多人協作
master分支:用於管理正式版本。
dev分支:用於管理正在開發版本。
bob分支:bob自己創建的分支,bob在這個分支下工作,然後合併到dev分支上。
michael分支:michael自己創建的分支,在這個分支下工作,然後合併到dev分支上。
# 抓取分支 ## 從遠程庫clone時,默認情況下,只能看到本地的master分支。 git clone https://github.com/shahdza/Demo.git # 在本地創建和遠程分支對應的dev分支 git checkout -b dev origin/dev # 建立本地dev分支和遠程dev分支的關聯 git branch --set-upstream dev origin/dev # 更新分支 ## 當小夥伴已經向origin/dev分支推送了他的提交。 ## 而碰巧你也對同樣的文件作了修改,並試圖推送。 ## 推送失敗,因爲小夥伴的最新提交和你試圖推送的提交有衝突 ## 需要把最新的提交從origin/dev抓下來 ## 然後,在本地合併,解決衝突,再推送 git pull |