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

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

时间:2024-12-18 23:46:06浏览次数:6  
标签:git -- stash 修改 以后 冲突 提交 上传

首先我们要明确,本地修改的代码,要进行暂存,不然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 并不自动解决冲突,冲突的发生与提交历史有关,而非工作区的内容。
 

标签:git,--,stash,修改,以后,冲突,提交,上传
From: https://www.cnblogs.com/chentiao/p/18611300

相关文章

  • git pull --rebase使用
    gitpull--rebase 是Git中的一个重要命令,它用于从远程仓库拉取最新的更改并将它们应用到当前分支之上,而不是创建一个合并提交(mergecommit)。gitpull--rebase 的工作流程拉取远程更改(类似于 gitfetch)。重放本地提交:它会先将本地提交暂时“摘下”。将远程的最新......
  • jquery多文件上传插件
    jquery.imageuploader.js是一款jquery多文件上传插件。该jquery多文件上传插件主要用于上传图片,它允许你选择多个图片文件,也可以直接拖拽图片到指定区域,然后显示图片的预览图和信息,最后通过Ajax一次性上传选择的图片到服务器上。在线预览 下载 该jquery多文件上传插件的特......
  • GO 学习笔记之零 (二)git 操作
    一、克隆git上仓库指定分支到本地1、使用VSCODE工具  详见:GO学习笔记之一环境安装-夏之夜-博客园 文章中的第四章节的"导入git项目" 二、git项目本地更改提交到git仓库1、使用VSCODE工具1.1工程只有一人开发,不存在冲突的场景点击VSCODE工具上的“源代码......
  • Git错误提交而已,不用慌
    Git错误提交而已,不用慌目录初始化结构1、第一次误提交提交了错误文件,同时修改1.txt内容为1232、第二次正常提交修改1.txt内容为456提交记录回滚方式一gitrevert版本号删除误提交的那一次提交,出现冲突,手动修改冲突文件之后进行提交push操作提交记录回滚方式......
  • Docker方式安装GitLab
    Docker方式安装GitLabGitLab提供了一个官方Docker镜像,该镜像包含了GitLab所需的所有服务,并以单个容器的形式运行。GitLab官方Docker镜像地址:GitLabDocker镜像(GitLabEE)注意事项GitLabDocker镜像默认不包含邮件传输代理(MTA),如Postfix或Sendmail。推荐......
  • 一个 ashx的 上传,代码示例
    -------------------------jsfunctionajaxUploadImg(btn){varbutton=btn,interval;newAjaxUpload(button,{action:'upload.ashx',data:{},responseType:'json',name:'myfile',......
  • 完美解决PHP无法上传大文件源码
    前端:vue2,vue3,vue-cli,html5,jquery,webuploader后端:php服务器:linux,centos,Windows,数据库:MySQL,达梦数据库,人大金仓平台:Windows,macOS,Linux,Ubuntu,RedHat,中标麒麟,银河麒麟,统信UOS,信创国产化CPU:x86(Intel,AMD,兆芯,海光),arm(鲲鹏,飞腾),龙芯(mips),龙芯(Loong......
  • JAVA实现大文件上传实例解析
    技术:分片,断点续传,加密传输,加密存储要求:开源,免费,技术支持需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:java,JSP,sprin......
  • ASP.NET大文件(视频)上传思路
    功能:大文件上传下载,断点续传,文件夹上传下载,加密传输,加密存储,云对象存储要求:免费,开源,技术支持前端:vue2,vue3,react,vue-cli,html,jquery后端:asp.net,vb.net,.netcore,.netmvc,.netwebform平台:Windows,macOS,Linux,Ubuntu,RedHat,CentOS,中标麒麟,银河麒麟,统信UOS,信......
  • SPRINGCLOUD实现大文件上传
    技术:分片,分块,分割,支持第三方软件集成,要求:免费,开源,技术支持前端:vue2,vue3,vue-cli,webuploader,html5后端:java,SpringBoot协议:HTTPWebServer:Tomcat,Resin数据库:MySQL,Oracle,SQLServer,达梦,人大金仓,国产化数据库平台:Windows,macOS,Linux,Ubuntu,RedHat,中标麒麟......