Git
概述
与SVN的差异: SVN存储文件的变化部分,Git存储改动过的文件。
三个工作区:
- 工作目录(项目目录)
- 在这里修改文件
- 暂存区域(Stage)可以Commit到Git仓库
- 在这里暂存文件,提供反悔机会
- Git仓库(.git)
- 提交到Git仓库,保存
配置用户信息
只在本地生效,告诉Git
git global user.name = "username"
git global user.email = "emailAddress"
基本操作
初始化
生成Git仓库 .git
git init
Add
git add 文件按名
git add . # 添加所有
查看暂存区状态
git status
提交
git commit -m "注释"
历史提交信息
git log --graph
回退版本
# 使用暂存区文件替换工作区文件
git checkout filename
# 从库里拿出来替换暂存区的文件
git reset filename
# 然后再checkout
# 使用HEAD的前一个版本覆盖工作区和暂存区
git reset --hard HEAD^ or git reset --hard HEAD ~ x
# x个^ 代表前x个
git reset --hard [commit id]
# soft, 不覆盖工作区和暂存区
git reset --soft [commit id]
# mixed, 只覆盖暂存区
git reset --mixed [commit id]
列出所有命令日志
git reflog
分支操作
默认分支是master
常见分支
- master分支
- 稳定代码分支, 用于发布版本
- dev分支
- 开发代码分支,用于维护开发中的代码,向master合并
- feature分支
- 新功能开发分支,向dev合并
- bug分支
- fix bugs merge to dev
查看分支
git branch
创建分支
从当前分支创建一个新的分支,并切换到新分支
git checkout -b dev
# 等于
git branch dev
git checkout dev
切换分支
git checkout master
# 移动当前指针head
合并分支
# 将dev 合并到master
git checkout master
git merge dev # fast-forward Merge
#将dev 合并到merge 并创建一个新的新的版本,显示一个明显的合并迹象
git merge --no-ff -m "comment XXX" dev
# No fast forward
隐藏分支
git stash
# 应用场景
# 在feature 开发新功能时,需要切换到bug分支修复bug,feature分支只add 未commit 切换到bug分支可能会造成覆盖,可先将feature分支工作区隐藏起来
# 也可以直接commit 但可能会造成commit的内容不完整
# 再 checkout
git checkout dev
查看被隐藏的工作区列表
git stash list
# 恢复
git stash apply stash@{0}
远程仓库
创建
# 创建远程仓库,无自己的工作区
git init --bare
# 创建本地仓库
git init
# 为本地仓库添加远程仓库源
git remote add origin username@ipaddress:仓库目录
# 为本地仓库添加远程仓库源,默认远程仓库名字叫origin
推送到远程仓库
git push origin master
# 将本地主分支推送到远程仓库
git push <远程主机名> <本地分支名>:<远程分支名>
克隆到本地
git clone 仓库地址
从远程仓库拉取并与本地分支合并
git pull
fetch
# 将远程仓库中master分支的最新更新拉取到本地仓库的branch1分支
git fetch 仓库名 master:branch1
# 将远程仓库origin中所有分支的最新更新拉取到本地仓库
git fetch origin
# 将远程仓库origin中master分支的最新更新拉取到本地仓库
git fetch <远程主机名> <分支名>
pulls
git pull = git fetch + git merge