工作场景使用提示
- 对于未开始开发的新需求,需以release分支为源文件拉取新的开发分支,避免后期需求上线时与其他版本需求上线时间不一致,导致上线代码交杂。
- 对于之前已开发的项目,启动另外新需求时,若重新以本地release分支为源文件拉取新的开发分支前,需要更新当前本地的release分支与远程库同步,避免后期开发代码冲突;注意区分源文件为本地还是远程库的release分支。
基础用法
自定义设置
- 基础配置
js 代码解读复制代码git config --global user.name "userName" // 设置git全局用户名称
git config --global user.email "userEmail" // 设置git全局用户邮箱
git config --global color.ui true // 设置颜色 eg: 文件名等会高亮显示
- 忽略特殊文件
.gitignore
文件加入配置项可忽略不需上传的文件,一个Git仓库可有多个.gitignore
文件,但.gitignore
文件在哪个(子)目录下即对那个(子)目录起作用,基本使用示例如下:
js 代码解读复制代码.* // 排除所有.开头的隐藏文件
*.class // 排除所有.class文件
!.gitignore // 不排除.gitignore文件
!App.class // 不排除App.class文件
例如在Windows环境自动在有图片的目录下生成隐藏的缩略图文件,如果有自定义目录,目录下就会有Desktop.ini
文件;在Python编译时会产生.pyc
、.pyo
、dist
等文件或目录。此时可设置.gitignore
文件如下:
js 代码解读复制代码# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
但是当我们已经设置过.gitignore
文件,但又确实想上传被.gitignore
文件过滤条件筛选掉的文件时我们可以使用-f
强制上传,同时可以使用命令查看.gitignore
文件中哪个规则过滤了该文件。
js 代码解读复制代码git add -f // 强制添加文件至暂存区
git check-ignore -v // 使用命令查看哪个规则过滤了文件
- 配置别名
alias.key
js 代码解读复制代码git config --global alias.st status // 设置别名后命令行 git st === git status
git config --global alias.unstage 'reset HEAD' // git unstage === git reset HEAD
// 可以尝试配置一下 git lg 如下
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
配置Git的时候,加上--global
是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。而我们所有配置文件项都存在于.git/config
文件中,别名则在文件的[alias]
选项后,要删除别名配置即可删除行。
基本操作
js 代码解读复制代码git init // 初始化版本库
git add // 将文件添加到仓库 工作区->暂存区
git commit -m 'commit desc' // 将文件提交到仓库 暂存区->远端 eg: 可多次添加文件然后一次性提交到仓库
git status // 查看仓库当前状态
git diff // 查看文件上一次的修改内容
git diff HEAD -- // 查看当前文件与上一次提交文件的对比内容
git log // 查看版本控制提交记录
git log --pretty=oneline // 查看版本控制提交记录 - 简化版
git log --graph // 查看版本控制中分支合并图
版本操作
- 版本回退
js 代码解读复制代码// 回退到上一个版本已提交的状态
git reset --head HEAD^ // 此处HEAD^表示上一版本 eg:HEAD^^为上两个版本,HEAD~100为往上100个版本
// 回退到上一个版本未提交的状态
git reset --soft HEAD^
// 回退到上一个版本已添加但未提交的状态
git reset --mixed HEAD^
// 回退到某个commit id版本已提交的状态
git reset --head commitID // commitID可不写全,git会自行补全,但填入值需可确定其唯一性
- 撤销修改及删除
js 代码解读复制代码git checkout -- // 撤销工作区的修改
git reset HEAD // 撤销暂存区的修改
git rm // 手动删除文件后 效果与git add 类似
git reflog // 记录版本控制每一次命令操作记录
远程仓库
js 代码解读复制代码git clone // 克隆远程仓库 url为仓库地址
git branch // 查看当前分支信息
git branch // 创建分支
git branch -d // 删除分支 eg: 该分支还未上传到远程时可删除
git branch -D // 删除分支 eg: 该分支已上传到远程但未合并分支
git branch --set-upstream-to= // 指定本地分支与远程分支的链接
git checkout // 切换工作区的分支 eg: 副作用可以还原工作区的删除及修改
git checkout -b // 创建分支并切换到该分支
git switch // 切换分支
git switch -c // 创建分支并切换到该分支
git push -u origin // 其中 -u 表示首次推送并将分支与远程库相关联
git push // 推送本地分支branchName内容至远程分支remoteName上
git pull // 拉取远程分支remoteName内容更新至本地分支branchName内
git merge // 将分支内容合并到当前分支
git merge --no-ff -m 'commit desc' // --no-ff参数表示以用普通模式合并
git remote // 查看远程库信息
git remote -v // 显示远程库详细信息
git remote rm // 删除远程分支remoteName eg: 此处只是删除本地与远程库的关联,远程库依旧存在于git
提升操作
- 提取分支修改 - 复制一个特定的提交到当前分支(会影响log的合并记录)
js 代码解读复制代码git cherry-pick commitID // 将commitID提交操作上所做的修改合并到当前分支
- 暂存工作区修改
js 代码解读复制代码git stash // 将工作区的修改内容清空并暂存到栈中
git stash list // 查看栈中缓存的修改操作列表
git stash apply // 将栈中栈首的修改还原到工作区 eg: apply操作还原后栈中的内容并不删除
git stash apply stash@{0} // 将栈中index为第0个的修改还原到工作区
git stash drop // 将栈中的的修改删除
git stash pop // 将栈中栈首的修改还原到工作区同步删除栈中该修改信息
- 整理提交历史
js 代码解读复制代码git rebase // 把本地未push的分叉提交历史整理成直线,使得查看历史提交的变化时更容易
SourceTree使用
以图形界面操作Git,省去了敲命令行的过程,对于常用的操作,例如提交、分支、推送等操作来说非常的方便。但在出错时,返回的依旧是Git命令返回的错误信息。
操作方式
- 远程
本地存在Git库时,可将本地资源直接拖入到SourceTree内添加本地Git库;本地不存在Git库时,也可以选择“New”-“Clone from URL”直接从远程克隆到本地。 - 提交
打开本地Git库后,SourceTree展示这个Git库的当前所有分支及文件状态。选择左侧面板的“WORKSPACE”-“File status”,右侧会列出当前已修改的文件(Unstaged files)。选中某个文件,该文件就自动添加到“Staged files”,实际上是执行了git add
命令。然后,我们在下方输入Commit描述,点击“Commit”,就完成了一个本地提交。实际上是执行了git commit -m "commit tip"
命令。 - 分支
在左侧面板的“BRANCHES”下,列出了当前本地库的所有分支。当前分支会加粗并用○标记。要切换分支,我们只需要选择该分支,例如master
,然后点击右键,在弹出菜单中选择“Checkout master”,实际上是执行命令git checkout master
。
要合并分支,同样选择待合并分支,例如dev
,然后点击右键,在弹出菜单中选择“Merge dev into master”,实际上是执行命令git merge dev
。 - 推送
在SourceTree的工具栏上,分别有Pull
和Push
,分别对应命令git pull
和git push
,只需注意本地和远程分支的名称要对应起来,使用时十分简单。
评论记录:
回复评论: