工作git问题总结

  • 前言
  • 一、git revert
  • 二、推送代码
  • 三、合并与冲突的解决
  • 四、commit备注相关
  • 五、拉取指定远程分支代码
  • 六、git stash 暂存更改
  • 七、git cherry-pick
  • 八、git submodule
  • 总结

git小白专用


前言

这是大三刚到公司实习遇到的一些git相关的问题,总结于此博客,本博客是无图的,大家可以根据目录选择自己想找的git命令, 感谢!


一、git revert

假设你提交了代码,发现自己提交的代码是有问题的,但是还没有发布版本(没有影响到别人),需要回到上一次对的代码,你可以用 revert , revert 跟 reset 有所区别,git reset 你一般没机会用的,都是leader管理终端的,用来帮你擦屁股,回退版本的,感兴趣的可以自己去看。

git revert 最大的特点是不会删掉你队友的代码,建议大家都用revert,即使你回退就只是上一次提交。

现在有一个情境,如下:

// commit-id     谁改的    备注
// (最新版本:你想回到你正确的代码)
// er3dgf4fs    pig     (队友代码)
// df21fs3sf    cissy   (错误的代码)
// fj4gg4ti4    cissy   (正确的代码)

这时候你可以用git revert [commit-id],

如果你队友中间没有push新的commit,你可以这么做:

# 1. revert 错误的那次
git revert df21fs3sf# 2. 弹出一个vim, 建议把所有备注删光,黄色的还有灰色的字,然后:wq
# 3. 如果你只是想回到正确版本,不继续改代码你就:
git status
git commit -m "fix: 回到正确的修改"
git push
# 4. 如果你有改代码
git status
git add .
git commit -m "fix: 回到正确的修改和修复xxx的问题"
git push

如果你队友中间有push的话,你直接按步骤来:

# 1. revert 错误的那次
git revert df21fs3sf
# 2. 可能有冲突噢,你本地解决冲突,记得问问队友,看有没有删除他代码
# 3. 然后跟上面一样,继续改代码还是仅仅回退正确,看着来

如果你及其不放心,我十分建议你去腾讯工蜂,或者码云、github 建议仓库试试,避免影响到队友或客户


二、推送代码

前言:看清自己需要哪个功能,读清小标题

1. 创建一个本地分支:local/cissychou推送到远程分支:feature/cissychou

创建一个本地分支叫local/cissychou,并且切换到这个新的分支

 git checkout -b local/cissychou

这一步可跳:查看工作区的状态。

 git status

接下来两个都是老命令了,都熟。

 git add [你的文件]git commit -m "fix: 修复xxxx问题"

推送命令,如果你没有 feature/cissychou 这个远程分支会自动创建的。假设你在这一步出错,请看下面的”合并与冲突的解决“。

git push origin local/cissychou:feature/cissychou

推送成功还不够,还需要删除自己的远程分支(不要删除beta,v1,v2这种版本分支

# 查看所有本地分支
git branch# 查看所有分支(包括了远程分支)
git branch -a# 删除远程分支
git push origin --delete feature/cissychou
# 删除本地分支
git branch -d local/cissychou
# 同步最新的远程分支(仓库什么样子,就让本地是什么样子)
git remote update origin --prune

2. 本地master分支推送到主分支master

示例说明:这个情况不常用,导师一般都会让你提交到自己的分支,然后等他review再合并到主分支。每次push之前建议 git pull --rebase 一下(有冲突的话,解决完就git pull --continue,再push)

git checkout master
git add .
git commit -m "first commit"
git push

前端组件库开发push之前建议去跑一下lint-fix跟test:update命令不然会不通过,如果不通过就再次push,会覆盖上一次执行的流水线作业。


三、合并与冲突的解决

说明:先说一下合并,场景:你功能开发完,导师review完,就会叫你合并到主干上的了

第一步,先切换回主分支,因为你是在分支local/cissychou上开发的

git checkout master

更新一下主分支的代码,因为可能你队友更新了代码

git pull

再切换回本地local/cissy分支

git checkout local/cissychou

可选步骤:如果有多次local分支的提交,就合并,只有一次可以不合并(这步可有可无)

# HEAD~2 表示合并最新两次提交
git rebase -i HEAD~2

下一步,将master内容合并到local/cissychou,这一步你可能需要解决冲突(解决完了就git add [冲突文件] 然后git rebase --continue,:q退出窗口),在分支上解决冲突就可以不那么污染主干代码了

git rebase master

接着就是合并一下本地local/cissy分支上的代码

git checkout mastergit merge local/cissychou

最后推到远程仓库,

git push

合并成功!


下面来述说合并时产生冲突的解决:
你在merge过程中发现提示的了conflict这个单词,其实就是发生了冲突,这个时候你应该返回vscode或者其它工具看看你们冲突的地方在哪,然后手动解决冲突。解决完成后(包括你们小组用eslint时,没有通过就要重新以下步骤):

git add .

这里的commit备注你可以重复原先那个

git commit
git push

在这里建议去用rebase合并,就不用经过add、commit这一步了,直接rebase --continue,不用写多一条commit message,遇事不要慌,做好死备份!

补充一点,在你本地分支推送到某远程分支出错时:! [rejected] local/cissychou -> feature/cissychou (non-fast-forward) error: failed to push some refs.

造成错误的原因我自己也没分析出来(非常建议大家每次开发完就删除远程分支,一个新功能一个新分支),这里应该将分支代码跟主干代码同步,解决方法是这样的:

git fetch origin feature/cissychou
git merge origin feature/cissychou

这里有两种情况,第一种:

git pull origin feature/cissychou

上面git pull有可能发生冲突,本地解决完冲突之后,对照上面的步骤git add、commit一波,完事了它会说:

# Merge branch 'feature/cissychou' of http://gitlab.xxxxxxxxxxxx into local/cissychou

第二种:加了rebase的话,你gitlab的提交记录不会出现 “Merge branch xxxxx of into xxxxxxxxx” :

git pull origin feature/cissychou --rebase

最后一步仍然是提交代码

git push origin local/cissychou:feature/cissychou

四、commit备注相关

第一个,备注更改:

git commit -m "i am so god!"#修改备注
git commit --amend -m  "i am so good!"

第二个,常用的提交备注的格式:

feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动, 或者库升级版本


五、拉取指定远程分支代码

当你不确定是不是因为你的改动而影响了,你可以拉取指定版本的代码,调试对比,场景:拉取 gitlab 上 biubiu 仓库 v1 分支的代码

git clone -b v1 http://gitlab.xxx.xxx/biubiu.gitgit clone -b v1 http://gitlab.xxx.xxx/biubiu.git  [自定义的文件夹名(默认是仓库名)]

你在这个分支上修改了的话,直接参照”第二点:创建分支并推送“,新建本地分支,然后add,commit,push xxx:v1这样 就可以啦!


六、git stash 暂存更改

常用场景:本地修改了想要git pull拉取代码, 即git pull 失败,切换分支git checkout 失败

git stash

查看暂存列表:

git stash list

可以看到 stash@{0} 就是刚存的,然后git pull 拉取最新代码,还原暂存的文件:

git pull
git stash pop stash@{0}

你可能看到:

Auto-merging xxx
CONFLICT (content): Merge conflict in xxxxx

系统会自动合并修改的内容,但是其中有冲突,需要本地解决其中的冲突。或许你第二步pop的时候会有 error: Your local changes to the following files would be overwritten by xxx,你可以丢弃所有更改来换取pop成功,代价很大,尽量去问请教老大~


七、git cherry-pick

建议看阮一峰关于 cherry-pick 的日志,我这里做个汇总。常用场景:想把 master 的某几个功能加到 pre-production 分支(预发布环境):

# 先记录master分支上那几个功能相关的COMMIT SHA, 假设一共2个commit
# 切换到pre-production分支
git checkout pre-productiongit cherry-pick 8582ea273f64ee8f2145b7a854ea6d5e69aba02d 8582ea293f64ee8f2140b7a854ea6d5e69aba02d#如果冲突了,在vscode细细解决好
git add .
git cherry-pick --continue#推送pick到分支上
git push origin pre-production

八、git submodule

关联子仓库,这种场景应该是挺常见的。git 是不支持直接在子目录git clone去关联子仓库的,在git add 的时候会报错。需要使用的是git submodule 命令关联:

# 进入到big仓库目录(或者big仓库子目录)
git submodule add https://git.xxx.com/test/mini.git
git submodule add https://git.xxx.com/test/mini.git [新名称]
git submodule add -b v1  https://git.xxx.com/test/mini.git  # 创建关联完成后会在根目录新增一个.gitmodules文件
# 接着提交代码

mini仓库被修改后,可以这样更新big仓库:

# 进入到big根目录
git submodule update --remote

详细的命令查看此链接。

总结

这些已经基本够用了,不够我再补充。

工作中git常用命令总结相关推荐

  1. 工作中git常用命令

    1.cd 切换到工程目录git add .或者git add -A 然后git commit -m "XX" 在git push到远程库,如果要push到某个分支上,可以使用git ...

  2. g-git 相关命令 及其 基本原理探索(二):git 在工作中的常用命令操作 ,超级实用!!!

    上一篇git 基本原理对git的使用以及文件分布已经有了一个整体的了解. 本篇将对工作中常用的一些git 操作命令的操作进行总结归纳,方便今后查阅. 文章目录 1. 分离头指针 2. 通过HEAD 来 ...

  3. 工作中 linux 常用命令:vi、cp、mv、rm、kill、curl、tail

    centos7 关闭防火墙: 1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: sys ...

  4. 收藏!工作中Git使用实践和常用命令流程合集

    来自:匠心Java 工作中git是一项必不可少的技能,在项目的开发进程中起着至关重要的作用 下面介绍一些git在工作中的一些使用实践.常用流程.常用命令,供大家参考! 一:前言 Git的定义是:分布式 ...

  5. Git常用命令、在IDEA中使用Git

    文章目录 一.概述 二.Git常用命令 1.Git全局设置 2.获取Git仓库-从远程仓库克隆 3.工作区.暂存区.版本库 概念 4.Git工作区中文件的状态 5.本地仓库操作 6.远程仓库操作 7. ...

  6. Git的使用——Git 常用命令总结、Git的使用、Git 的分支、远程仓库的使用、IDEA 中使用Git、Git 工作流(Git Flow、Github Flow、GitLab Flow)

    Git的使用--Git 常用命令总结.Git的使用.Git 的分支.远程仓库的使用.IDEA 中使用Git 一.Git 常用命令总结 为了方便后续查找命令,故先把总结放前面,教程放后面 1.git 基 ...

  7. Git 常用命令集锦

    文档已储存在 GitHub,这里不再更新校正,请原谅. 远程仓库相关命令 克隆远程仓库:git clone git://github.com/jquery/jquery.git 查看远程仓库:git ...

  8. git常用命令,分支操作,子模块

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) 二. Git 常用 ...

  9. Git常用命令和Git团队使用规范指南

    1. 前言 在2005年的某一天,Linux之父Linus Torvalds 发布了他的又一个里程碑作品--Git.它的出现改变了软件开发流程,大大地提高了开发流畅度,直到现在仍十分流行,完全没有衰退 ...

最新文章

  1. Symfony3.0 实践教程 (三) 安装与配置Symfony
  2. 在iOS端如何使用Charles用作http调试
  3. js代码收集(1)_隐藏div、table间隔样式设置
  4. vivox60pro和iqoo7pro哪个好
  5. 初赛问题求解及选择题数学相关整理
  6. 对于XLS碎片提取的深入研究
  7. tabula-java_Java FileSystems.getDefault方法代码示例
  8. 『设计模式』职责链模式(Chain of Responsibility) 可怜的加薪、请假之路
  9. apache httpd mysql_Centos7安装配置Apache(httpd)+php+mysql+phpMyAdmin
  10. 编译Android源码相关资源及文章
  11. android访问setting权限,如何获得我的Android应用程序的可怕WRITE_SECURE_SETTINGS权限?...
  12. mac安装热更新插件
  13. (转)独家| ICO被定性为涉嫌非法集资 一夜暴富梦碎
  14. 【POJ3608】Bridge Across Islands(旋转卡壳求两凸多边形的最短间距)
  15. LINUX修改文件权限
  16. 流畅的python是python3吗_流畅的 Python - 3. 文本与
  17. Wowza服务器系列(4):使用rtmp协议向wowza推流的wowoza配置方法
  18. 三维空间中向量的旋转
  19. 联想服务器AR系列,联想正式发布AR一体机:晨星AR
  20. qpieseries显示百分比_为饼图添加百分比显示效果

热门文章

  1. 如何查看APP签名文件的SHAI码
  2. 谈谈安卓的Bitmap与Drawable
  3. 浏览器趋势2015年4月:StatCounter与NetMarketShare
  4. 使用 clear 属性清除浮动的原理?
  5. google推出了新闻搜索服务!
  6. 一元线性回归--R实现
  7. Springboot毕设项目基于SpringBoot的特产销售系统设计与实现7m7bcjava+VUE+Mybatis+Maven+Mysql+sprnig)
  8. vivado中复数乘法器IP核使用小结
  9. Trapcode Particular 5 - Visibility
  10. python 十进制、二进制、八进制、十六进制表示与转换