前言
“知识就是力量 —— 安琪拉”
Git 是现在最流行的版本控制工具,也是每一位软件开发者的标配,本文只介绍在日常工作中会涉及到使用技巧,不谈Git的内部实现。
旨在让刚入行或Git使用不熟练的开发同学能在未来的工作中避坑。下面会涉及到一些命名使用,建议读者在本地使用Git命令行实践一下,加深印象。
基本概念
workspace:工作区,比如修改后的代码就会保存在工作区。
staging area:暂存区,执行add后代码就会保存在暂存区。
local repository:本地仓库,执行commit后代码会被保存在本地仓库。
remote repository:远程仓库,比如 github 仓库,执行push后代码就会将代码同步到远端仓库。
常用命令
下面介绍一些在实际开发过程中会接触使用到的Git命令,标识“常用”的命令建议重点了解。
安装 & 配置
git config: 获取和设置git配置。
获取 & 初始化
git init: 初始化本地git仓库。git clone: 克隆项目到本地。
快照操作
git add: 提交内容到暂存区。【常用】git status: 查看git工作区状态。【常用】git commit: 提交暂存区内容至本地仓库。【常用】git reset: 回滚代码,并且不会产生一次新的commit,但会将回滚前代码贮藏在工作区。git revert: 回滚代码,并且会产生一次新的commit。
分支与合并
git branch: 输出本地分支信息,-a 输出所有分支(本地和远程仓库)信息。git checkout: 从检出指定分支,-b 检出并新创建一个本地分支。【常用】git merge: 合并指定分支。【常用】git log: 输出分支commit记录信息。git stash: 贮藏暂存区内容。git tag: 获取和创建tag。
更新
git fetch: 拉取远程仓库分支代码至本地。【常用】git pull: 拉取远程仓库分支代码至本地,并自动合并到工作目录,可理解为git fetch + git merge。【常用】git push: 推送本地分支至远程仓库。【常用】git remote: 获取仓库源和设置仓库源 。
patching
git cherry-pick: 将某一个commit提交内容应用到指定分支。git rebase: 变基,比如在master执行git pull --rebase,那么远端合并的commit就会在一条基线上,如下图:
常见问题处理
合并请求发生冲突
使用情况:在远端提交合并请求出现冲突无法自动合并,需要手动解决冲突。
/* 以 develop 合并 master 为例 */
git checkout develop // 第一步切换到develop请求合并分支
git pull // 第二步拉取develop远程分支代码
git merge origin/master // 第三步本地合并远程master分支
code . // 第四步使用vs code解决从图
git push // 第五步推动本地develop至远程develop
经过以上本地代码解决冲突处理后,合并请求即可自动合并。
本地合并发生冲突
使用vscode直接在工作区处理,注意在解决冲突过程中需要原开发者和现开发者一起处理。
撤销commit
使用情况:commit信息书写错误,或者提交的代码不正确(注意,需要满足commit未推送至远程仓库条件,如果不满足需要考虑使用代码回滚)
// 第一步回退到上一个版本
git reset HEAD
// 第二步重新提交正确的commit
git add -A && git commit -m 'xxxxx'
HEAD表示当前版本HEAD^表示上一版本
代码回滚
使用情况:提交了错误代码,并且需要紧急回退代码,你可以通过git reset做回滚处理。
git log // 第一步找到要回滚的commit hash
git reset --hard [hash] // 第二步执行回滚到指定hash
git push --force // 第三步将回滚后内容推送到远程仓库
注意:使用--hard时会丢弃回退前提交
挑出需要的代码
使用情况:如果你犯了一个错误,就是将某个改动提交到了错误分支,你可以通过git cherry-pick将该提交应用到其他另一个分支。
git checkout master // 第一步切换到正确分支
git checkout -b feature-xxxx // 第二步切换一个自己的feature分支,准备应用commit
git cherry-pick [hash] // 第三步copy commit hash,替换命令行内[hash]
git push
代码暂存
使用情况:当自己本地代码开发到一半,需要切换其他分支处理事情,且不希望将未开发完内容提交一个commit,你可以通过git stash命令暂存内容。
git add -A // 第一步将工作区代码提交至暂存区
git stash save '暂存xxxx代码' // 第二步将暂存区代码贮藏
git checkout master // 第三步处理完切换到提交stash的分支
git stash pop // 第四步弹出贮藏区内容
git stash clean // 第五步清空贮藏区内容
创建TAG
git tag -a 'v1.1.0' -m '1.1.0版本' // 第一步创建tag
git tag --push // 第二步推送tag至远程仓库
删除本地tag
git tag -d 'v1.1.0'
获取tag列表
git tag --list
第三方Git工具
tig:命令行工具
sourcetree:GUI Git 工具(推荐)。这一款软件也是目前作者在用的git工具,推荐的目的“优秀工程师都有良好的习惯”。
最后
“ 欣赏一下成都难得的夕阳美景”