創建版本庫
git init #初始化所在目錄爲Git倉庫初始化的目錄可以不爲空
添加文件到版本庫
git add <file> ... #添加文件到暫存區(stage)
-f <file> ... #強制添加到暫存區(可用於添加忽略文件)
git commit -m "提交說明" #從暫存區提交到版本庫
git add 命令可多次執行,然後commit一次。
時光機穿梭
- 查看狀態、差異
git status #查看倉庫當前狀態
git diff [file] #比較工作區和暫存區的差異
git diff --cached [file] #比較暫存區和版本庫的差異
git diff HEAD -- [file] #比較工作區和版本庫的差異
- 版本切換
git log #查看提交歷史
git log -1 #查看最後一次提交信息(-2 則是最後兩次)
git log --pretty=oneline #單行格式顯示提交歷史
--graph #顯示分支合併圖
--abbrev-commit #簡寫的commit_id
git reflog #查看所有操作記錄,包括刪除的commit記錄
git reset --hard HEAD^ #回退到上一版本
# HEAD 表當前版本, HEAD^ 表上一版本,HEAD^^ 表上兩版本,HEAD~99 表上99版本。
git reset --hard commit_id #切換到指定版本
Git跟蹤管理的是修改,而非文件
- 撤銷修改
git checkout -- <file> #撤銷工作區的修改
git reset HEAD <file> #撤銷暫存區的修改
若已commit但沒提交到遠程庫,可用版本回退進行撤銷
刪除文件
- 方法一:工作區刪除文件,然後正常提交
rm <file> ... #工作區刪除 git add <file> ... #將修改提交至暫存區 git commit -m "說明" #提交到版本庫
- 方法二:直接命令刪除工作區和暫存區,然後提交版本庫
git rm <file> ... #刪除工作區和暫存區文件 git commit -m "說明" #提交到版本庫
刪除、增加文件也都屬於修改
遠程倉庫
- 創建SSH Key
ssh-keygen -t rsa -C "[email protected]" #生成的Key在家目錄.ssh文件夾裏面,pub後綴是公鑰,另一個是私鑰。
- 添加遠程庫
git remote add origin git@server-name:path/repo-name.git #添加遠程倉庫
git remote #查看遠程庫信息
-v #顯示詳細信息
git push -u origin <branch> #推送並關聯指定分支到遠程庫
除第一次關聯,之後push不用加-u選項
- 從遠程庫克隆
git clone git@server-name:path/repo-name.git #將遠程倉庫克隆到當前目錄
git pull #拉取遠程倉庫內容
分支管理
git branch <branch> #創建分支
git checkout <branch> #切換到指定分支
git checkout -b <branch> #創建並切換到該分支
git branch #查看現有分支
git branch -d <branch> #刪除指定分支
git branch --set-upstream <branch_local> <branch_remote> #指定本地分支與遠程分支的鏈接
git merge <branch> #合併指定分支到當前分支
--no-ff <branch> #禁用快速合併
git merge --no-ff -m "提交說明" <branch> #普通方式合併,並附提交說明
git stash #保存當前工作環境(包括工作區和暫存區)
git stash list #查看保存的工作列表
git stash apply [stash@{X}] #恢復工作狀態,但不刪除stash內容
git stash pop [stash@{X}] #恢復工作狀態,並刪除stash內容
git stash drop [stash@{X}] #刪除stash內容
git branch -D <branch> #強制刪除分支(常用於未合併的分支)
HEAD不是直接指向提交點,而是指向分支,分支再指向提交點
- 多人協作
##error: failed to push some refs to ...
1. git pull 遠程庫
2. 解決衝突(若有),再push
- 分支管理策略圖
標籤管理
git tag #查看現有標籤
git tag <tag_name> #給當前所在的commit打標籤
git tag <tag_name> <commit_id> #給指定commit打標籤
git tag -a <tag_name> -m "標籤說明" <commit_id> #給指定commit打標籤,並附說明
-s <tag_name> -m "標籤說明" <commit_id> #用gpg私鑰簽名
-d <tag_name> #刪除標籤
git show <tag_name> #顯示標籤信息
git push origin <tag_name> #推送標籤到遠程庫
git push origin --tags #推送所有未推送的標籤到遠程庫
git push origin :refs/tags/<tag_name> #刪除遠程標籤(先刪除本地,再使用該命令刪除)
自定義Git
git config --global user.name "you_name" #設置全局用戶名
git config --global user.email "[email protected]" #設置全局郵箱
git config --global color.ui true #設置全局顏色顯示
git config --global alias.<alias_name> <'command_name'> #設置別名
忽略特殊文件
- 工作區創建
.gitignore
文件 - 內容舉例,如下:
#Windows: Thumbs.db ehthumbs.db Desktop.ini #Python: *.py[cod] *.so *.egg *.egg-info dist build #My configurations: db.ini deploy_key_rsa
- 工作區創建
git check-ignore -v <file> #查看忽略該文件的規則
規則有錯時常用上述命令查找定位
- 配置別名列表
git config --global alias.confg 'config --global'
git confg alias.st status
git confg alias.co checkout
git confg alias.ci commit
git confg alias.br branch
git confg alias.unstage 'reset HEAD'
git confg alias.last 'log -1'
git confg alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)
%C(bold blue)<%an>%Creset' --abbrev-commit"