git基本概念
- WorkSpace : 工作区
- Index / stage : 暂存区
- Repository: 本地仓库
- Remote / origin : 远程仓库
常用命令
配置命令
# 显示配置
$ git config --list
# 编辑用户和邮箱
$ git config --global user.name xiaoming
$ git config --global user.email xiaoming@Gmail.com
# 直接编辑配置文件
$ git config -e --global
初始化命令
# 初始化代码库
$ git init
# 获取一个新项目
$ git clone [url]
代码提交
# 添加文件到暂存区
$ git add file
# 强制添加被忽略的文件
$ git add -f filename
# 添加当前目录所有文件
$ git add .
# 停止追踪文件,工作区中保留
$ git rm --cached file
# 提交代码到本地仓库区
$ git commit -m "message"
# 提交暂存区只当文件
$ git commit file
分支操作
# 查看所有分支(远程和本地)
$ git branch -a
# 新建分支
$ git branch branch1
# 切换分支
$ git checkout brancha
# 删除本地分支
$ git branch --delete dev
# 删除远程分支
$ git push origin --delete branch
$ git push origin :dev
查看信息
# 查看分支的所有操作记录
$ git reflog
# 查看所有变更文件
$ git status
# 显示提交历史
$ git log --pretty=oneline
# 展示线形历史
$ git log --graph
# 显示详细历史
$ git log -p
# 显示当前分支的版本历史
$ git log
# 显示暂存区和工作区的差异
$ git diff
# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
# 显示当前和远程分支的区别
$ git diff origin remote
远程操作
# 下载远程仓库的所有变动
$ git fetch origin
$ git fetch -a
# 下载某一个分支变动
$ git fetch origin dev
# 取回远程仓库的变化,并与本地分支合并 [git fetch + git merge ]
$ git pull origin [remote-branch]:[branch] // src -> dest
// 省略后面的相当于拉取远程与当前分支合并
$ git pull origin branch1
// 以rebase模式 [dev rebase master]
$ git pull --rebase origin master:dev
# 上传本地指定分支到远程仓库
$ git push origin [remote]:[branch] // src -> dest
// 省略前面的=删除dev分支
$ git push origin :dev
// 省略后面的=推到同名分支
$ git push origin dev
# 强行推送当前分支到远程仓库,即使有冲突
$ git push origin dev -f
撤销操作
# 恢复暂存区的指定文件到工作区
$ git checkout [file]
# 如文件已提交到暂存区则恢复到工作区(修改后)
$ git checkout file
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]
$ git reset --hard head // 撤销到远程分支的最新历史
# 暂时将未提交的变化移除,稍后再移入【先暂存开发修bug】
$ git stash
$ git stash pop
rebase和merge的使用
# 与主分支同步
$ git fetch origin
$ git rebase origin/master
$ git chekout branch1
$ git pull origin branch1
$ git checkout branch2
$ git rebase branch2
# rebase 2 [常用]
$ git pull --rebase origin master:dev
# 合并分支
$ git fetch origin
// 默认fast-froward 不能保留需要合并的分支信息
$ git merge --no-ff branch1 -m "Merge 'branch1' into branch"