本文默认读者使用过git,并且知道简单的git命令。本篇文章介绍git学习中的重点,以及利用git构建自己的workflow
Git学习的动力和重点
1 兴趣驱动。很多朋友能在网上看到各种各样git教程,但是这些文章仅仅是写出git各种命令的操作。当看到这种文章时,我们往往只是找到需要的命令就直接离开,这导致每次使用git都需要google搜索。
2 工作驱动。由于工作驱动学习git,如果公司代码全部托管在git仓库,程序员由于要多次提交代码,如果每次都要上网查询git命令则会大大影响效率,而且也不够“酷”。
我是由于工作驱动才认真学习git的操作,并在学习过程中结合工作中使用git的各种场景,制定了自己的workflow。
个人认为git学习的重点为以下两点:
-
明确工作区,暂存区,暂存区分支的概念
-
分支指针的概念
常用的git命令
这是我工作中常用的Git命令,如果不知道每条命令的意思,请继续耐心往下看。我认为记忆git命令需要依托于各种使用场景,而不能简单的依靠记忆,否则很容易遗忘。
-
git status
-
git add
-
git commit
-
git stash
-
git log
-
git log --graph
-
git reflog
-
git cherry-pick
-
git checkout -b
-
git checkout
-
git reset --hard
-
git reset HEAD
-
git merge
Git构建workflow
场景一:简单提交
-
git add -A /*将工作区修改提交到暂存区 */
-
git commit -m “” /* 将暂存区修改提交到暂存区分支 */
-
git log --graph /* 强迫症的看一下commit记录 */
-
git push origin master /* 将本地分支的提交,push到远程master分支 */
场景二:开发新feature
-
git checkout -b /* 从本地master分支创建以feature命名的分支 */
-
[新feature开发中…]
-
git add -A /* 将新增代码从工作区更新到暂存区 */
-
git commit -m “information” /* 将暂存区代码提交到feature的本地分支 */
-
git log --graph /* 强迫症的查看以下commit的log */
-
git checkout master /* 切换到本地master分支 */
-
git merge /* 将feature分支的改动同步到本地master分支 */
-
git push origin master /* 将本地master分支的改动push到远程master分支 */
场景三:解决bug
-
git checkout -b (从master分支创建以ticket id命名的分支)
-
[解决bug中…]
-
git add -A (将ticket分支修改的代码更新到暂存区)
-
git commit -m “information” /* 将修改的代码提交到ticket分支 */
-
git log --graph /* 强迫症的看下提交记录 */
-
git checkout master /* 切换到master分支 */
-
git merge /* 将ticket分支的修改merge到master分支 */
-
git push origin master /* 将本地master分支的修改push到远程aster分支 */
场景四:开发新feature的过程中,需要立刻解决bug
-
git checkout -b /* 为某个feature创建新的分支 */
-
[新功能开发中…,突然来了一个优先级更高的bug需要解决]
-
git stash /* 保存feature分支工作区修改的代码 */
-
git checkout master /* 切换到本地master分支 */
-
git checkout -b /* 根据ticket id创建修改bug的分支 */
-
[解决bug中…]
-
git add -A /* 将修复bug改动的代码更新到暂存区 */
-
git commit -m “information” /* 将暂存区代码提交到本地ticket分支 */
-
git checkout master /* 切换到master分支 */
-
git merge /* 将ticket分支的修改merge到master分支 */
-
git checkout /* 切换到最初的feature分支 */
-
git log --graph /* 强迫症的看一下commit的历史记录 ,记录最新一次commit id的前6位*/
-
git stash pop /* 将feature分支工作区的修改还原 */
-
git cherry-pick /* 将master分支最新的提交同步到feature分支 */
场景五:正在修改代码,忽然发现某个文件修改错误,需要撤回
- git checkout – /* 撤回工作区中某个文件的修改 */
场景六:修改的代码更新到暂存区,需要撤回暂存区的修改
- git reset HEAD /* 将暂存区的修改撤回到工作区 */
场景七:修改的代码已经commit到本地分支,需要撤销修改
方法一:
- git reset --hard HEAD^ /* 返回到上次提交 */
方法二:
-
git log --graph /* 查看每次commit的ID number */
-
git reset --hard /* 返回到某次提交 */
场景八:修改的代码已经push到远程仓库,需要重新提交修改
-
[在master分支修改代码]
-
git add -A /* 将工作区代码更新到暂存区 */
-
git commit -amend /* 在上次基础上继续提交 */
-
git push origin master /* 将修改push到远程master分支 */
Note:这是一种偷懒的做法,理论上不应该在master分支修改代码,但我目前还未找到好的替代方法。
场景九:同时开发多个feature
- git checkout -b /* 为每个feature创建一个分支 */
场景十:在本地分支撤销了上次提交,你又后悔了怎么办
- git reflog /* 该命令记录每次使用的git命令 / git reset --hard /
返回上一次提交 */
总结
这篇文章主要介绍了在不同的开发场景中使用哪些git命令进行操作。我花了一上午的时间将GIT的操作学习了一遍,又花了一下午的时间根据工作中使用git的场景,构建了自己的workflow。如果你还未熟练使用git,这篇文章能在某种程度上为你提供帮助。
如果你没使用过git,那这篇文章对你来说无异于天书。我建议可以先去学习廖雪峰老师写的git操作手册。
ps: 欢迎关注我的公众号[酷酷的coder],分享转行菜鸟程序员成长过程汇总的烦恼和反思.