Git初学札记(四)————Git Push的常规操作与Pull冲突解决

11 篇文章 4 订阅
订阅专栏

目录

引言

Git命令行的远程Push

EGit Push操作中的冲突问题

同步

工作区与本地库同步

工作区与远程库同步

图标

重点


引言

在团队开发当中,Git Push是多人协作环节中的最重要的一环可能没有之一。同SVN一样,push操作可以看做是对远端程序的提交。

在多人协作中,push往往是最容易出现问题的一个环节,因为其他开发者有可能修改了你正准备提交的文件,并且已经先你一步提交到了远程仓库中。由此,才会引出后面一系列的pull、merge等操作。

由于在之前的博客《 实现个人的Git远程代码版本控制————EGIT完成Eclipse到GitHub一条龙》中已经详细介绍了通过EGit Push新项目的操作,因此本篇博客主要介绍一下Git命令行的操作,以及在Push中可能会遇到的种种问题及解决办法。

Git命令行的远程Push

不论以哪种方式push到远程仓库,都需要先在远程建立一个可以与之关联的空的仓库。为了简化演示过程,我们采用GitHub作为远程仓库的创建服务器。

首先,我们已经在远程建立了一个空仓库:

复制仓库地址,执行git命令:

如上图所示,首先我们为本地仓库add(关联)一个远程仓库,并默认命名为origin,然后通过push命令推送到远程仓库,输入git push -help,可以查看一下push命令的参数,其中-u代表设置上游(远程库)

第一次通过-u参数push项目的同时设置好远程库之后,后面就可以直接git push origin master了。

EGit Push操作中的冲突问题

正如引言中所述的情况,我们将分支push到远程仓库的时候恰巧远程仓库中已经有了改动而与我们正准备提交的代码有冲突。这种情况在过去的开发中屡见不鲜,在svn中也存在同样的问题,常常是一个工具类,大家都添加了自己的工具方法,如果不希望merge混乱,就需要有一个专门的merge人员,每天定点去服务器上对大家的修改进行merge操作。虽然近些年微服务的口号喊得响彻,但是对于不适合微服务的项目,就仍然存在多人同时修改了共有文件的情况发生。虽然我们不希望这样的情况发生,也会尽量避免这种情况的发生,但仍然要学习如何使用Git去处理冲突的情况。

最有用的建议是:

push之前请先同步对比!

EGit的全部功能都封装自git命令,应该说git命令包含了全部的EGit插件操作。但是对于某些比对性的操作,命令行的体验往往是差强人意的,尤其是在项目文件繁多的情况下,几十个文件进行比对,绝对会让你看的眼花缭乱。

假设此时,我们已经对自己修改的代码充满了信心,并且提交到了本地仓库,正准备push到远程库上去,这个时候我们应该怎么做?是直接push还是先pull?我觉得先查看一下同步比对数据的情况,然后对我们接下来的操作结果做到心中有数才是上策!接下来就来讲解一下对比的操作。

同步

工作区与本地库同步

选择Team>Synchronize Workspace

Synchronize Workspace”翻译过来是“同步工作区”,这听起来有些“吓人”,但是实际上,它仅仅是将本地库与工作区内容进行比对。

工作区与远程库同步

同步之前,需要先将 Remote Tracking 的远程库进行Fetch...操作。

Fetch步骤如下:

切换到Git Repository视图,右键项目名 > Remote > Fetch...

Fetch 完成!

这样我们就可以任意选择远程分支与本地工作区进行比对:

注意这里EGit为了区分工作区与本地库的比对和工作区与远程库的比对,特意加了一个with,因此这里的“Synchronize with Workspace”代表的是工作区与远程库的一个分支进行比对。

比对图标

这里的一些图标信息和svn的用法是类似的,灰色箭头代表本地有修改,蓝色箭头代表远程有修改,红色双箭头代表此文件有冲突。

在EGit官网上也给出了具体图标的解释:

(但愿各位的英语和我一样好 罒ω罒 !)

从上图可以看出,我们的项目仅仅是有一个本地的修改,因此可以确定的是push之后不会出现任何冲突问题,可以放心大胆的push。也不需要每次push之前都无脑的pull。

这里注意一下,Git的Push操作无法在Synchronize视图中进行,因为Git的push操作都是针对于分支而言的,也就是说,我们实际上只能push当前的分支,而非文件,就算是只有一个文件的修改,也必须是push分支,也就是命令行中看到的git push origin master,master就是当前的分支。而Svn可以直接在Synchronize视图中提交单个或多个文件,这一点应该说svn要优于git。但是瑕不掩瑜,Git强大的分支开发和版本管理体系是svn无法匹敌的。

为了push我们的分支,需要先回到基础Java视图中来,右键项目>Team>Remote>Push...或者 :右键项目>Team>Push to Upstream(前提是已经与远程库建立关联关系)

push成功!

重点

假设,我又对程序进行了修改(添加了一行输出语句“I wanna learn Vue.js very well!”),并且已经提交到本地库中,正准备push到远程仓库。

我们如之前的建议,正确的将工作区代码与远程仓库的代码进行比对:

但是不幸的是,有人已经对这个文件进行了修改,并且冲突甚是嚣张!如果我们不做任何感想,直接push会有什么情况发生?

我们心里很清楚,push操作在冲突的情况下是不可能完成的,不过貌似返回的错误信息还是很友好的。但请注意红框内的单词:rejected ,拒绝 ,而且还是过去时,那啥也别说了,远程库已经拒绝了我的push请求!所以英语不好的小伙伴一定注意了,这里的push失败对话框真的是不太鲜明,有可能误以为push操作已经成功。这里千万要注意。

我们可以检查一下远程的仓库,来进一步验证我们的判断:

果然没有push成功。

那么这个时候我们应该做什么?我们应该先pull,然后解决冲突再进行push操作。

右键项目>Team>Pull... 或者:右键项目>Team>Pull (前提是已经有远程库关联)

建议刚开始使用的小伙伴可以先使用“Pull...”进行拉取操作,因为会弹出一个Pull对话框,里面的信息对我们理解我们的操作会有不小的帮助,后面熟练了可以使用“Pull”直接从默认的远程库中去拉取。

执行完成后,我们的冲突文件就变成了这个样子:

可以看到,Git会将HEAD和远程库的修改内容全部都写入冲突文件中,并且使用<<<<<<< ======= >>>>>>>进行区分。

我们手动进行修改即可,修改结果如下:

再次commit的时候,Git会为我们自动生成一个Commit Message信息,非常智能:

提交完成后,我们再次尝试Push操作,弹出结果对话框如下:

这回貌似没有rejected了,进一步检查一下GitHub上的文件内容:

和我们push的结果一样。

综上,就是冲突发生的时候我们的处理办法。但是这种开发者之间无沟通的冲突解决办法只是一种方案,我们通过pull,手动删减内容,来完成冲突的解决。但是如果这个文件发生冲突的地方达到几十行甚至上百行的情况又该怎么办?

如果一个文件的冲突内容参差不齐,且数量很多,达到了几十行甚至上百行的级别,那么我们应该与发生冲突的开发者进行线下沟通,尝试以版本回退后共同merge的方式来解决冲突,即先进行线下merge,然后由其中一人进行push操作。

总的来说,解决冲突的办法还是比较多的,如果讨厌删删改改的小伙伴,可以同事之间协调沟通,共同merge,这样也可以相互学习,交流经验。

 

综上,就是push操作中常见的问题及解决办法。如有疑问欢迎文末留言。

 

git clone出现fatal: unable to access: SSL certificate problem: certificate has expired的解决方案
weixin_43178406的博客
06-06 11万+
本文主要介绍了git clone出现fatal: unable to access: SSL certificate problem: certificate has expired的解决方案,希望能对使用git的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案
Git push 常见用法
03-08
Git push 常见用法,git里面help 可以帮助我们查看。这个文档只是补充。。
git push前请先git pull
热门推荐
小泽
05-21 1万+
开发过程中 如果要推送代码到远程仓库,请先git pull。养成好习惯。 原因很简单,在你开发过程中,你的同事可能也在改代码然后他提交了没通知你,你直接git push很容易造成代码冲突代码冲突解决也简单,可万一你手哆嗦点错了或者项目很大结构很复杂点了不该点的,后面结果谁也说不好,所以为了保险起见,每次都先git pullgit pushgit pull提示有冲突,很简单,把冲突的文件(是你自己做的那份复制里面的内容到记事本,确保你写的东西不丢失)之后按它提示的来合并,它合并完之后,再提交 ...
Git常用指令大全详解
最新发布
异构算力老群群(在读985计算机博士生)的技术博客
09-12 674
本文详细总结了Git的常用指令,涵盖了基础配置、仓库操作、文件操作、分支操作、远程仓库操作、标签操作以及其他高级操作。希望这些内容能够帮助大家更好地掌握Git,提高开发效率。当然,Git的功能远不止于此,还有更多的高级特性和命令等待大家去探索和学习。
git push --help
weixin_30721077的博客
12-07 1808
git-push(1) Manual Page NAME git-push - Update remote refs along with associated objects SYNOPSIS git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [...
GIT - push前的回退
seaalan的博客
04-16 477
从工作目录添加到暂存区 $ git add . 从暂存区提交到提交区 $ git commit -m "这是一个回退的内容" [developOne 60e132f] 这是一个回退的内容 1 file changed, 1 insertion(+) 从提交区撤销到暂存区 $ git reset a99c4 Unstaged changes after reset: M git...
git push命令_Git Push命令解释
cumi7754的博客
08-14 2818
git push命令The git push command allows you to send (or push) the commits from your local branch in your local Git repository to the remote repository. git push命令允许您将提交(或推送 )从本地Git存储库中的本地分支发送到远程存储库。 To...
Git初学资料整理——常见命令介绍
11-28
适用于初学者学习git使用。包含Git原理理解,常用命令使用,以及提交冲突解决实例。
Git原理详解与实操指南——html.zip
03-23
Git原理详解与实操指南——html.zip 这个压缩包文件包含了关于Git的全面学习资料,特别是对于初学者和开发者来说,它将帮助你深入理解Git的工作原理,并提供实际操作的指导。以下是对这些知识点的详细说明: 1. **...
《终极的 Git 课程 —— 与虚幻引擎相结合 》(4)
02-15
《终极的 Git 课程 —— 与虚幻引擎相结合 》 学习 Git 的用法,以及如何设置虚幻引擎 UE4 和 UE5 项目与版本控制,允许您做出实验分支,提交您的更改和恢复,重置和变基,并将所有更改推到在线存储库。 通过初始化...
git合作开发时,没有pull就直接push怎样
JunePeng的博客
05-19 6151
git的时候总遇到一些奇怪的问题 目前遇到最麻烦的还是在push之前没有pull 每天上班第一件事pull一下,上传代码之前一定要pull 没有pullpush出现merge 即使使用git reset --soft HEAD^,回到仓库,但是出现其他同事提交的代码,这个时候想pull也不行,提示有待merge的,因为别人也提交了代码 ,导致自己不敢直接上传,万一影响了别人就很惨了。 具体我是这么做的: 1、git log 查看commit的记录,查找上一个(!!!最近的那一个)没
Git不要只pullpush,学学这5条提高效率的命令
weixin_46837985的博客
05-16 161
作者: 出来吧皮卡丘https://juejin.cn/post/7071780876501123085前言使用 Git 作为代码版本管理,早已是现在开发工程师必备的技能。可大多数工程师还是只最基本的保存、拉取、推送,遇到一些commit管理的问题就束手无策,或者用一些不优雅的方式解决。本文分享我在开发工作中实践过的实用命令。这些都能够大大提高工作效率,还能解决不少疑难...
push报错需要先pull ideapull执行不力解决
yinhaoq的博客
01-03 281
push报错需要先pull ideapull执行不力解决
Git学习总结(27)—— Git 不要只 pullpush
科技D人生
05-25 462
stash 描述 官方解释:当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用 git stash。该命令将保存本地修改,并恢复工作目录以匹配头部提交。stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。 应用场景 我猜你心里一定在想,为什么要变干净?应用场景:某一天你正在 feature 分支开发新需求,突然产品经理跑过来说线上有bug,必须马上修复。而此时你的功能开发到一半,于是你急忙想切到 master 分支,然后你就看到以下报错:
git push失败,git操作顺序
calabash_man的博客
08-09 477
提示:详见 ‘git push --help’ 中的 ‘Note about fast-forwards’ 小节。error: 推送一些引用到 ‘http://git…com.cn/zhjg/umc_v2.git’ 失败。存在冲突,需要先拉取远程代码自动合并)—> 查看状态 —> 解决冲突 —> 重新添加、提交。提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更。提示:(如 ‘git pull
【随笔】Git 高级篇 -- 上传命令的参数 (上)git push(三十六)
JMFive的博客
05-09 2450
大家好,又见面了,我是夜阑的狗🐶,本文是专栏【Git】专栏的第三十五篇文章;这是今天学习到Git 高级篇 – 上传命令的参数 (上) 💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。【Git】, 此专栏是我是夜阑的狗对GitGitee等工具使用过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。很好!既然你知道了远程跟踪分支,我们可以开始揭开git pushfetch和pull的神秘面纱了。
常用 git 命令使用说明(-help)汇总
滴水成川
01-15 4143
1、克隆远程代码git clone qiaozhiguang@XSLUser[master*]$git clone -help usage: git clone [] [--] [] -v, --verbose be more verbose -q, --quiet be more quiet --progress
git pull冲突怎么解决_Git学习笔记
weixin_39624097的博客
11-23 751
先说句废话:git是优秀的版本控制工具之一,想进互联网公司肯定要学,下文是我学习git做的笔记,如果有错误,欢迎指正。另外欢迎在学GOlang的朋友加群交流:756817655我是菜鸟,大佬们带带我废话不多说,先上总结,初学的朋友可以先了解一下,再向下就是学习笔记了。一、学完总结* 常用初始化本地仓库:git init 绑定本地用户名和邮箱:git config --global user.nam...
IDEA解决Git冲突全攻略:从commit到push
"IDEA中解决git pull冲突的方法" 在软件开发过程中,版本控制工具Git是必不可少的,而使用Git时,冲突问题常常出现。本文将详细介绍如何在IntelliJ IDEA (IDEA)这个强大的Java集成开发环境中解决git pull时遇到的...
277
原创
1597
点赞
6336
收藏
1054
粉丝
关注
私信
写文章

热门文章

  • Spring Boot面试杀手锏————自动配置原理 196936
  • Mybatis工作原理 129378
  • Mybatis Plus————代码生成器 110674
  • 双剑合璧————Spring Boot + Mybatis Plus 94327
  • 传统form表单提交方式的文件上传与文件存储 76130

分类专栏

  • Java 60篇
  • 数据库与SQL语句 38篇
  • Spring & Spring Boot 36篇
  • Spring Cloud Alibaba 12篇
  • 数据结构与算法 25篇
  • Linux 30篇
  • Java多线程与并发 21篇
  • Java 8 9篇
  • 架构设计 7篇
  • 设计模式 16篇
  • Redis 9篇
  • MyBatis 5篇
  • Apache Shiro 5篇
  • Git必知必会 11篇
  • IDEA 7篇
  • Maven自动构建工具 7篇
  • Java技术面试 9篇
  • JVM 8篇
  • 计算机通识 6篇
  • 程序人生 8篇
  • 前端技能 4篇

最新评论

  • 当面试官问我————为什么String是final的?

    NtylbL: 什么计算机爽文表情包

  • MySQL——JSON_REPLACE()函数修改JSON属性值

    qq_42735328: 如果是数组对象呢,有法指定只改其中一个元素的一个属性不呢

  • 经典数据结构——前缀树

    hhA0: 第一部分前缀树逻辑结构那里 存的是abcf而不是abcd吧

  • IDEA——常用快捷键

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)使用更多的站内链接;(2)提升标题与正文的相关性。

  • Spring Boot面试杀手锏————自动配置原理

    小一猿: 哎,已经上锁了

最新文章

  • Java 函数式编程思考
  • IDEA——工程项目的两种窗口开发模式
  • 快速计算两位数相乘
2023年3篇
2022年2篇
2021年57篇
2020年38篇
2019年88篇
2018年100篇
2017年16篇
2016年4篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家西安玻璃钢雕塑哪家好保定玻璃钢仿真水果雕塑温州玻璃钢造型雕塑太湖石玻璃钢人物雕塑制作杭州德清商场美陈布置怎么做兰州玻璃钢雕塑制作厂家绥芬河玻璃钢雕塑厂家商场美陈落地搭建玻璃钢动漫形象雕塑定制青岛商场美陈厂家供应玻璃钢花盆厂家在哪儿江西玻璃钢植物雕塑江苏高质量玻璃钢雕塑图片东莞 玻璃钢花盆厂展馆玻璃钢雕塑郑州商场美陈玻璃钢卡通雕塑吉安步行街玻璃钢雕塑订做价格江苏玻璃钢金属雕塑设计玻璃钢仿铜雕塑专业厂家佛山定做玻璃钢雕塑北京玻璃钢雕塑制造厂家安顺玻璃钢雕塑制作玻璃钢大象雕塑沈阳创意玻璃钢雕塑玻璃钢大型雕塑设计贵不贵江门品质玻璃钢雕塑遵化玻璃钢雕塑玻璃钢雕塑用什么树脂最好景观玻璃钢雕塑报价西昌玻璃钢马雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化