git本地修改以后,从远程更新分支以后,解决冲突,上传,整体步骤

news/2024/12/18 23:35:10/文章来源:https://www.cnblogs.com/chentiao/p/18611300

首先我们要明确,本地修改的代码,要进行暂存,不然git不知道做了修改,暂存的方法,有两种,第一种是git stash,第二种是git add ,这两种的区别在于

功能点git stashgit add
作用 临时保存修改,清理工作目录 准备将修改提交到历史记录
修改存储位置 保存到 stash 堆栈 保存到暂存区(Staging Area)
是否影响历史记录 不会直接影响提交历史 下一次提交时会影响历史记录
常用场景 临时保存修改,方便切换分支或操作 准备提交修改
是否可恢复 可以通过 git stash pop/apply 恢复 提交完成后,修改已记录,不能回滚到暂存
是否与提交相关 独立于提交历史,不用于提交 用于准备提交

在解决本地修改与远程同步的问题时,选择使用 git stash 或 git add 取决于你的具体需求。以下是两者的对比与适用场景:


1. 使用 git stash

适用场景

  • 暂存未完成的修改:代码尚未完成,不希望提交到本地历史中。
  • 临时保存修改:需要切换分支或执行其他操作,但又不希望丢失当前工作。
  • 保持提交历史干净:不想为了中间状态创建无意义的提交。

使用方式

  1. 暂存本地修改

    git stash
    

    这会将工作目录恢复为干净状态,所有未提交的修改被存储在栈中。

  2. 拉取远程更新

    git pull --rebase
    
  3. 恢复修改

    git stash pop
    

    恢复后如果产生冲突,解决冲突后继续:

    git add <文件>
    git rebase --continue
    

优点

  • 安全:本地的修改不会影响到提交历史,可以随时恢复。
  • 灵活:适合未完成的代码开发,保存后可以切换其他分支或任务。

缺点

  • 增加步骤:需要手动存储和恢复修改。
  • 复杂性:如果使用不当(如忘记 stash pop),可能丢失工作内容。

2. 使用 git add

适用场景

  • 准备提交当前修改:代码修改已完成并准备提交。
  • 解决冲突时的必备操作:标记冲突已解决。
  • 保留工作进度:希望随时将当前更改提交到历史中。

使用方式

  1. 将修改添加到暂存区
    git add .
    
  2. 创建一个临时提交
    git commit -m "临时保存修改"
    
  3. 拉取远程更新
    git pull --rebase
    
  4. 解决冲突后合并提交历史(如果需要):
    git rebase --continue
    git reset --soft HEAD~1 # 撤销临时提交,但保留修改,HEAD~1 表示上一个提交,HEAD~3最近的 3 次提交
    git commit -m "合并后的提交信息"
    

优点

  • 直观:使用 add 和 commit 后,所有修改都保存在版本历史中,不会意外丢失。
  • 无需额外步骤:省去 stash 的存储和恢复过程。

缺点

  • 污染历史:如果提交不够有意义,可能导致提交记录变得冗杂。

总结

需求/情况推荐方法理由
代码尚未完成,不想提交到历史 git stash 暂时存储修改,保持提交历史干净。
代码已完成,准备提交 git add + commit 将更改纳入版本控制,形成明确的提交历史。
解决冲突 git add 标记冲突已解决后继续操作(rebase 或 merge)。
不确定是否提交到历史 git stash 保留修改的灵活性,不做提交决策。
多个功能修改混杂,需拆分提交 git add -p 按片段逐步添加修改,进行精确控制。
临时保存但不想写提交信息 git stash 避免为临时状态创建无意义的提交。

最佳实践

  1. 开发过程中:

    • 未完成的代码:用 git stash
    • 已完成的功能:用 git add 提交。
  2. 保持提交历史干净:

    • 如果是临时的工作进展,用 stash
    • 如果是功能点完成,用 add 和有意义的提交信息。
  3. 团队协作中:

    • 使用 stash 可以减少提交历史中的临时记录。
    • 使用 add 可确保在协作过程中有明确的提交进展。

选择方法时,根据项目管理风格和个人习惯灵活调整。


如何避免冲突?

如果你希望在拉取远程更新时完全覆盖本地修改,或者你想自动解决冲突(例如自动采用远程版本),可以考虑以下方法:

1. 使用 git pull --rebase --strategy=theirs

--strategy=theirs 会强制 Git 在发生冲突时选择远程版本而不是本地版本。这会自动解决冲突,并且丢弃本地修改,只保留远程仓库的更改。

git pull --rebase --strategy=theirs

2. 保持本地修改但自动解决冲突

如果你希望保留本地修改(即保留本地更改而不是丢弃),可以使用以下命令来避免冲突并继续 rebase:

git pull --rebase --strategy=ours

--strategy=ours 会使用本地的修改覆盖远程的冲突内容,但会继续拉取远程更新。

3. 手动解决冲突

如果你希望手动处理冲突,则可以继续按照通常的冲突解决方式处理:

  1. 执行 git pull --rebase(如果遇到冲突,Git 会暂停并标记冲突文件)。
  2. 解决冲突后,执行 git add <冲突文件>
  3. 继续 rebase 操作:
    git rebase --continue
    

4. 强制覆盖本地修改(谨慎使用)

如果你完全想丢弃本地的所有修改,直接重置工作区:

git reset --hard
git pull --rebase

这会丢弃所有本地修改并将工作区恢复到远程仓库的状态。


总结

  • git stash 保存了你的本地更改,但 git pull --rebase 会基于提交历史进行操作,冲突通常发生在已提交的内容之间。
  • 如果你希望避免冲突并自动采用远程的版本,可以使用 git pull --rebase --strategy=theirs
  • 如果你想保持本地修改并解决冲突,可以手动解决冲突并继续 git rebase
  • 使用 git stash 并不自动解决冲突,冲突的发生与提交历史有关,而非工作区的内容。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855094.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源系列】CentOS7下Docker环境搭建开源堡垒机Apache Guacamole

Apache Guacamole 是一个无客户端远程桌面网关。它支持 VNC、RDP 和 SSH 等标准协议。不需要插件或客户端软件。借助 HTML5,一旦在服务器上安装了 Guacamole,只需使用 Web 浏览器即可访问桌面。 1.Guacamole的架构介绍 Guacamole不是一个独立的网络应用程序,而是由多个部分组…

ThreeJs-07操控物体实现家具编辑器

本章节实现效果,通过gui快速添加场景,家具,并且可以快速设置家具实现一个编辑器效果一.基础设置与物体添加列表 用之前做过的一个案例来改首先不要这个模型,然后换个背景颜色,并且添加一个网格辅助器1.1 添加场景 先往事件对象里面添加一个函数,到时候点击就会调用这个函…

数据集划分;参数超参数;交叉验证

在机器学习和深度学习中,将数据分为训练集(Training Set)、验证集(Validation Set)和测试集(Test Set)是常见的做法,每部分数据承担不同的任务: 一.基本概念 1.训练集(Training Set):训练集用于训练模型,即通过算法调整模型的参数以最小化损失函数(Loss Function…

爱米导航网(imi),您的互联网书签搭子

爱米导航(Imi)网是一个综合性的互联网资源聚合平台,它以其丰富的内容和便捷的服务受到了广大用户的喜爱。该网站收录了数千个不同类型的互联网工具网站,覆盖了AI工具、自媒体运营工具、产品经理工具以及UI设计师工具等多个领域,为用户提供了一个一站式的解决方案。 爱米导…

记录一次springboot启动流程不完整版

1.Sort ApplicationInitializer:2.sort Listener:3.getRunListener:4.eventPublishingRunListener.starting 发布启动中事件; 构建 ApplicationArguments 参数, 4.1prepareEnvement: [StubPropertySource {name=servletConfigInitParams}, StubPropertySource {name=servletC…

键盘连击软件解决方案

解决的问题 jjjjjjjjjjjjjjjj键盘连击了,windows系统中的“筛选键”功能就能短暂解决这个问题,可是筛选的时间太长无法在面板设置更短的时间,但可以使用软件解决。 方法一 系统 筛选键 win+i 打开设置 -> 搜索“筛选键” -> 打开筛选键开关 使用限制:重复键最低只能设…

【建议收藏】最新版IDEA2024.3及 AI Assistant 一键激活到2099

成功永久激活 一、支持的IDE和版本支持JB家族所有IDE激活 支持版本为2021.3~2024.1二、如何破解激活 第一步:激活工具下载 为了防止破解工具被删除,通过公众号回复“「永久激活」”获取下载最新工具(如过期,请记得提醒我哦) 关注公众号后台回复“「永久激活」”,获取最新…

《平衡树》读后感

第一框,世界属于fhq-treap 是什么? 你说的对,但是《fhq-treap》是由范浩强自主研发的一款全新树形数据结构。数据结构发生在一个被称作「二叉搜索树」的幻想世界,在这里,被人创造的节点将被授予「随机优先级」,导引期望 \(O(\log n)\) 之力。treap 将扮演一位名为「根据优…

虚拟机unraid系统安装

首先下载unraid文件https://unraid.net/getting-started windows系统使用vmware虚拟机 创建虚拟机过程中注意usb的不同协议 2.0 3.0 由于unraid系统只能识别fat32协议的文件系统,因此需要将u盘格式化 可以使用easeus 或者 傲梅 https://www.easeus.com/partition-manager/ htt…

基于.NET WinForm开发的一款硬件及协议通讯工具

前言 今天大姚给大家分享一款基于.NET WinForm开发的一款硬件及协议通讯工具:PLC-CommunTools。 项目介绍 PLC-CommunTools是一款基于.NET WinForm开发的一款硬件及协议通讯工具,包含各类厂商的PLC协议及基础的TCP、串口通讯、IO口通讯等协议通讯功能的实现整合,注意还有一部…

游戏过程

根据是否结束游戏的逻辑选择对掷骰子的过程用bool申明变量掷骰子 static bool RollDice (w,h,ref Player p1,ref Player p2,Map map) {InfoClear(h);Console.ForegroundColor=p1.type==E_PlayerType.Player?ConsoleColor.Cyan:ConsoleColor.Meganta;if(p1.isPause){p1.isPause…

6.Group组件

关于Group组件的简单介绍首先,Group组件本身并不是一个“布局”类的组件,它只是一个容器,没有提供调整内部组件展示位置的方法,也就是说,当我们将多个组件(比如button)放在group中时,他们(根据流式规则?)会全部挤在窗口的左上角,当然,如果我们没有设置组件的大小的话…