git 常用操作流程
零、杂谈
git 中 origin 单词其实没啥意义,只是习惯用而已,master 也是如此
一、git 常用操作的命令
00 推送代码到远端
日常开发完一块功能,要把代码推送到远端保存时,一般是按如下步骤进行操作:
git status
显示本地仓库的状态。如果此时显示远端没有更新的代码,接着执行以下步骤;git add <filePath>
把此次改动的文件加入本地缓存区;git commit -m 'msg'
把文件提交到本地仓库,并一同带上此次修改信息;git push origin <branchName>
把当前本地分支的代码推送到相应的远程分支上。
01 标签相关
在阶段性的时候,一般会给工程代码打上一个标签,用标签来更简洁地标注工程每一个节点。
1 列出标签
git tag
显示工程当前所有的标签。
如果想只显示某些标签,可以像这样使用通配符来进行标签过滤:git tag -l "v1.1*"
2 创建标签
标签可以带上备注信息,当然也可以不带上,如果只是简单的打上标签而不附上描述信息,可以执行这样的命令:git tag tagName
而在打标签的时候同时附上描述信息,则需要如此执行:git tag -a tagName -m "tag message"
如果想要查询某个 tag 的描述信息,你可以使用 show 命令:git show tagName
3 推送标签
标签与分支类似,在本地仓库创建完之后,需要推送到远端保存,否则别人是看不到你创建的标签。此时你需要使用 push 命令:git push origin tagName
02 分支
在该部分,我主要总结了自己在两家公司工作过程中,团队使用到的合并分支方法:merge & rebase
。
1 创建并切换到新分支
在日常功能开发时,首先是从主分支检出新分支作为功能开发分支,此时的本地仓库当前分支需要为主分支,且保证本地仓库版本与远端一致。然后,基于主分支创建自己的新分支,使用如下命令:
1 | git checkout -b <branchName> |
执行完该命令,你会得到一个新的本地分支,并且当前分支已切换到新创建的分支上。这其实是两个步骤:创建分支,切换分支。你当然可以分开执行下面两行命令,达到同样的效果:
1 | git branch <branchName> |
2 显示分支
需要显示工程下有多少个分支时,使用命令:git branch
。其中,带有 * 的代表当前分支。
加上 -v 参数,你可以在显示分支时,一并显示各个分支最新一次的提交:git branch -v
。
除此之外,你还可以使用命令 git branch -vv
来显示所有分支,同时带有每个分支对应的远程分支,及最新的一次提交。
3 推送分支到远端
当你开发完业务功能,需要推送到远端保存时,使用 push 命名:git push origin <branchName>
,也可参考上述 00 章节。
4 拉取分支
在上述 00 章节介绍执行 git status
后,如果显示本地仓库代码并非最新时,需要是先拉取远端代码,把本地代码保持最新,之后提交到远端才可能避免冲突。
但是,如果本地分支没有与某个远程分支建立联系(例如新建工程第一次提交的时候),要先建立联系,而推送本地分支到远端时可以一并建立联系:
1 | git push --set-upstream origin <branchName> |
这样就会在远端也建立 branchName 分支,并与本地的 branchName 分支建立了联系。
当需要拉取远程分支到本地的时候就可以使用命令:git pull origin <branchName>
此外,git fetch
可以把远程的数据抓取到本地,但是不会修改本地的内容,需要自己手动 merge: git merge
。
而刚才说的 git pull
命令,其实正是合并了上面两条命令的功能,在抓取后一并修改。
5 分支的合并
开发完成,我们需要把功能分支合并会主分支。而这一过程可以使用 merge 或 rebase。使用 merge 方式,进行开发分支合并到 master 主分支的场景时,我的操作步骤如下:
首先检出当前分支,例如是开发分支,然后我们要合并 master 分支进开发分支。
- 切换到本地 master 分支,使用
git pull
保证本地 master 是最新的 - 切换到本地的开发分支,使用合并的命令:
git merge master
,将 master 合并进开发分支 - 把本地分支
git push
推送到远端 - 再在本地切换到 master 分支,使用合并分支的代码:
git merge <开发分支名>
,把功能代码合并进主分支 - 使用
git push
把 master 分支推送到远程
6 分支的变基
使用 merge 时,功能分支与主分支是两条不同的分支,合并后会显得很凌乱,此外可以使用 reabse 命令来进行分支合并,好处是可以把功能分支的提交记录与主分支统一,在观感上看着更舒服。(但个人感觉使用 rebase 不是很好,因为需要强推到远端覆盖原功能分支)
使用 rebase 合并代码时,我的操作如下:
- 切换到本地 master 分支,使用
git pull
保证本地 master 是最新的 - 切换当前开发分支,使用命令:
git rebase master
;
如果变基过程中如遇到冲突,可以执行命令查看冲突文件:git am --show-current-patch
,此外可以执行命令回退到 rebase 前的状态:git rebase --abort
- 手动解决了冲突的文件,然后使用
git add <冲突的文件名>
把文件加进本地的仓库,然后再使用如下命令继续 rebase:git rebase --continue
(rebase 如果遇到冲突是一个一个冲突提示的,然后一个一个冲突解决,git add,直至合并成功) - rebase 完成后需要强推到远端功能分支:
git push --force origin <开发分支名>
;如果是多人开发的功能分支,可以使用如下命令:git push --force-with-lease origin <开发分支名>
,使用该命令在强制覆盖前会进行一次检查如果其他人在该分支上有提交会有一个警告,此时可以避免福改代码的风险 - 此时再切换回本地 master 分支,把功能分支合并进来:
git merge <开发分支名>
- 最后使用
git push
把 master 分支推送到远程
07 测试分支的使用
1 | git checkout feature/grtest |
END