版本管理工具git
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInVGcq5SNwYzNzMWZ4MmY0gDZzUWO3QTM0Y2Y5EmZiVzN0UGOm9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.jpeg)
git簡介
分類
集中式:cvs,svn
分布式:git
托管網站:github
下載下傳
git官網: https://git-scm.com/
國内鏡像:https://npm.taobao.org/mirrors/git-for-windows/
mac
$ brew install git
linux 常用指令
建立:mkdir dirname
進入:cd dirname
目前:pwd
檔案清單:ls
檢視:cat readme.txt
編輯:vim readme.txt
删除:rm readme.txt
git配置
指定使用者名和位址
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
git config --global color.ui true # 顯示顔色
建立版本庫
初始化倉庫:git init
添加到暫存區:git add filename
送出更改:git commit -m "message"
檢視狀态:git status
檢視不同:git diff
檢視工作區和版本庫裡面最新版本的差別:
git diff HEAD -- readme.txt
時光穿梭
送出曆史
git log
git log --pretty=oneline
git log --graph --pretty=oneline --abbrev-commit
指令曆史:git reflog
版本回退
回退到上一版本:git reset --hard HEAD^
HEAD表示目前版本指針,往上多個版本:HEAD~100
回到指定版本:git reset --hard 版本号
工作區和暫存區
工作區(Working Directory) -> 版本庫(Repository)(暫存區stage -> master)
撤銷删除
丢棄工作區的修改:git checkout -- file
撤銷暫存區的修改:git reset HEAD file
删除版本庫檔案:git rm 删掉,并且git commit
遠端倉庫:
建立SSH Key
ssh-keygen -t rsa -C "[email protected]"
預設值即可
路徑:使用者主目錄/.ssh目錄
github 添加公鑰
克隆項目:
https協定:git clone https://github.com/mouday/demo.git
ssh協定:git clone [email protected]:mouday/demo.git
指定克隆深度:git clone --depth 1 [email protected]:mouday/demo.git
關聯遠端倉庫:git remote add origin [email protected]:username/gitname.git
拉取推送
送出到遠端:git push -u origin master
-u參數關聯本地和遠端分支,用于第一次推送
推送master分支到遠端: git push origin master
拉取分支:git pull
檢視遠端分支:git branch -r
拉取遠端分支:git checkout -b 本地分支名x origin/遠端分支名x
拉取遠端分支:git checkout -t origin/branch_name
分支管理
備注:有修改未 commit 最好不要切換分支
建立與合并分支
檢視分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
合并某分支到目前分支:git merge <name>
删除分支:git branch -d <name>
不使用Fast forward模式合并:git merge --no-ff -m "merge with no-ff" dev
bug分支
存儲目前現場:git stash
檢視:git stash list
恢複現場:git stash apply
删除存儲:git stash drop
恢複并删除:git stash pop
強制删除有被合并過的分支:git branch -D <name>
多人協作
檢視遠端庫的資訊: git remote
詳細的資訊:git remote -v
建立本地dev分支: git checkout -b dev origin/dev
建立關聯:git branch --set-upstream-to=origin/dev dev
多人協作: 推送 -> 失敗則拉取 -> 解決沖突 -> 本地送出 -> 再推送
标簽管理
建立标簽
檢視标簽:git tag
設定标簽:git tag <tagname> [commit id]
檢視标簽資訊:git show <tagname>
指定标簽資訊:git tag -a <tagname> -m "blablabla..." [commit id]
用PGP簽名标簽:git tag -s <tagname> -m "blablabla..." [commit id]
操作标簽
推送一個本地标簽:git push origin <tagname>
推送全部未推送過的本地标簽:git push origin --tags
删除一個本地标簽:git tag -d <tagname>
删除一個遠端标簽:git push origin :refs/tags/<tagname>
自定義git
忽略特殊檔案
.gitignore https://github.com/github/gitignore
強制添加:git add -f App.class
檢查規則:git check-ignore -v App.class
配置别名
git config --global alias.st status
倉庫的Git配置檔案 .git/config
目前使用者的Git配置檔案 使用者主目錄/.gitconfig
經驗建議
每次送出前記得diff,以免送出錯誤代碼
下班回家前,整理好自己的工作區
并行的項目,使用分支開發
遇到沖突,搞明白原因,不要随意丢棄别人的代碼
産品釋出後,記得打tag,友善将來拉分支修複bug
git單人工作流
# 本地送出
git status # 檢視本地倉庫的修改狀态
git add # 暫存檔案
git commit # 送出檔案
# 推送到遠端倉庫
git pull
git push origin master
注意,origin:遠端中央倉庫别名。master 推送的分支
git功能分支工作流
# 第一步,确認master主分支版本
$ git branch # 檢視分支
$ git checkout master # 切換到master分支
$ git pull # 拉取最新master分支
# 第二步,建立feature功能分支
$ git checkout -b feature master # 建立feature分支
# 第三步,本地送出代碼
$ git status # 檢視代碼狀态
$ git add . # 添加到暫存區
$ git commit -m message # 送出到分支
$ git push -u origin feature
# 推送 feature 分支到中央倉庫(origin)
# -u選項設定本地分支去跟蹤遠端對應的分支
# 設定好跟蹤的分支後,就可以使用git push指令省去指定推送分支的參數
# 第四步,送出合并請求
# GUI界面點選 Pull Requests
# 第五步,接受合并
git checkout master
git pull # 檢查master分支是否為最新
git pull origin feature # 合并到本地master分支
git push # 推送到遠端倉庫
# 其他
$ git merge feature/psy_itjuzi_person
其他
# 補充送出,不新增送出記錄
$ git commit -m "以防死循環" --amend
參考: