Idea 开发环境不断切换git代码分支导致冲掉别人代码

本文描述了一次因不规范的Git分支操作导致代码丢失的事件,强调了及时更新本地master、正确合并分支(避免直接合并/origin/*)、使用Sourcetree管理和stash/unstash功能的重要性。作者提供了防止类似问题的解决方案和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

问题分析

分支随意切换

本地master未做更新就合并

解决方法

sourcetree

Idea stash unstash 暂存和还原

cherry-up 遴选代码

保持良好的代码基线

杜绝问题再次出现

Git分支说明

如何合并master分支

功能分支不合并/origin/*分支


问题分析

分支随意切换

使用git reflog查看执行命令,以下是发生事故的切换和提交动作

46f72622e1 HEAD@{41}: commit: feat: 【Sales - 6.3】小程序端不登录也可以录入客户线索
c5e7d9f6e1 HEAD@{42}: fetch origin feature/20240102_Sales6.3_xingang:feature/20240102_Sales6.3_xingang --recurse-submodules=no --progress --prune: fast-forward
2b8fa87fb5 HEAD@{43}: checkout: moving from develop to feature/20240102_Sales6.3_xingang
12c545fd29 HEAD@{44}: merge feature/20240102_Sales6.3_xingang: Merge made by the 'recursive' strategy.
9ff4b93056 HEAD@{45}: checkout: moving from feature/20240102_Sales6.3_xingang to develop
3648003300 HEAD@{46}: commit: feat: 【Sales - 6.3】调整积分发放事务处理
fa49330927 HEAD@{47}: checkout: moving from develop to feature/20240102_Sales6.3_xingang

由于在feature分支和develop分支之前不停切换,导致服务器端git仓库的代码被删除了。作为一个Java老鸟,遇到这种情况还是很尴尬的。如下图红框部分的代码是将别人提交的代码直接改回去了,导致代码丢失!!!!

以上都是因为不规范操作导致代码切换出现的代码丢失,如何避免呢?暂时只有一种stash和unstash的暂存和还原的方法来解决。Idea并没有不让你未提交代码就必须不能切换本地分支,不断切换分支就有可能导致代码不一致的情况。

在上面很清晰看到一个别人的merge操作。此后我们再去提交的时候就是将自己本地的代码覆盖上同一个分支。此时再commit & push ,那么灾难就降临了。

本地master未做更新就合并

 本地master分支未更新,直接合并远程服务器端的/origin/master ,此时产生了一大堆文件changes,这里数量坑定超纲了。怎么可能有几百个文件的改动?

 这里合master的误区就在于 认为远程服务器端的/origin/master 是最新的代码,实际合并代码时走的应该还是本地master分支。所以,切记要更新本地master。

解决方法

sourcetree

sourcetree可以很明确地知道分支代码能不能够切换,凡是代码有冲突 有修改的都要处理完成了才能切换分支。

Idea stash unstash 暂存和还原

Idea 项目选中,右键git就有 stash changes 和unstash changes.

cherry-up 遴选代码

在什么分支修改,就提交到什么分支,然后再将这个提交选入到功能分支。

保持良好的代码基线

每次合并分支之前找到基本检出分支,如master,先合并master再合并到其他分支,避免一堆冲突,容易合错代码。

杜绝问题再次出现

Git分支说明
  • GIT 初始化:本地默认分支叫 master、服务器默认名为 origin
  • 本地创建新工程
  • 本地工程更新、同步到本地分支 master
  • 本地分支 master 同步到服务器上、服务器节点变成 orgin/master
  • 本地创建分支名为 branch
  • 更新本地分支 branch
  • 本地分支 branch 同步到服务器上、服务器节点变成 orgin/branch
  • 更新本地分支 master
  • 用本地分支 master 更新服务器节点 orgin/master
  • 本地分支branch合并到主干 master
如何合并master分支

本地master分支未更新,直接合并远程服务器端的/origin/master ,此时产生了一大堆文件changes,这里数量坑定超纲了。怎么可能有几百个文件的改动?

 这里合master的误区就在于 认为远程服务器端的/origin/master 是最新的代码,实际合并代码时走的应该还是本地master分支。

本地分支 master 同步到服务器上、服务器节点变成 orgin/master。

本地分支 master 同步到服务器上、服务器节点变成 orgin/master。

本地分支 master 同步到服务器上、服务器节点变成 orgin/master。

请记住,先将master更新之后在做合并操作!!!!

请记住,先将master更新之后在做合并操作!!!!

请记住,先将master更新之后在做合并操作!!!!

请记住,先将master更新之后在做合并操作!!!!

当代码还原到2024/1/31 20:39这个时刻,奇迹出现了:回归到线性提交状态!!!

更新本地master 然后再次合并master,此时不会再有问题:

至此,问题得以解决,也提醒自己要注意工作干细致了,一个坑里反复入坑。

不要因为细节导致出现愚蠢而低级的错误再次发生!!!!!

不要因为细节导致出现愚蠢而低级的错误再次发生!!!!!

不要因为细节导致出现愚蠢而低级的错误再次发生!!!!!

功能分支不合并/origin/*分支

在合并代码的时候,请务必将需要合并的分支检出到本地,然后更新之后再进行合并。

### 如何在 IntelliJ IDEA 中从主分支拉取代码到功能分支IntelliJ IDEA 中操作 Git 是非常方便的,可以通过图形界面完成大部分常见的 Git 命令。以下是关于如何将 `main` 分支上的更改拉取并合并到功能分支 (`feature`) 的具体方法。 #### 使用 IntelliJ IDEA 将主分支代码拉取到功能分支 1. **切换到目标分支** 在 IntelliJ IDEA 的右下角状态栏中找到当前分支名称,点击它会弹出分支列表。选择要同步的功能分支 (例如 `feature`) 并切换过去[^3]。 2. **获取最新的远程仓库数据** 转至菜单栏中的 `VCS -> Git -> Fetch` 或者直接按下快捷键组合(通常是 `Ctrl + T`)。这一步是为了确保本地拥有最新的远程分支信息[^1]。 3. **合并主分支到当前分支** 切换回功能分支之后,在 IDE 的顶部导航条里选择 `VCS -> Git -> Merge Changes...` 。随后会出现一个对话框显示可以被合并的所有可用分支;从中挑选 `origin/main` 来进行下一步动作。 4. **处理可能存在的冲突** 如果存在任何文件修改重叠的情况,则需要手动编辑这些发生分歧的地方直到消除矛盾为止。完成后标记解决方案并通过提交解决冲突的状态给定下来。 5. **推送更新后的功能分支** 完成上述步骤后记得把最终版推送到远端服务器上去共享成果:通过 `VCS -> Git -> Push` 实现这一目的。 ```bash # 对应命令行方式如下所示: $ git checkout feature # Step 1: Switch to your feature branch. $ git fetch origin # Step 2: Fetch latest changes from remote repository. $ git merge origin/main # Step 3: Merge updates from main into feature branch. # Resolve conflicts if any arise during this process... $ git add . # After resolving all conflicts, stage them for commit. $ git commit # Commit the conflict resolutions. $ git push origin feature # Finally, push updated feature branch back up. ``` 以上就是在 IntelliJ IDEA 内部利用其内置工具链来达成从主要开发线(main/master)向特性工作区(feature branches)引入新改动的一个流程概述。 ### 注意事项 - 确保每次执行前都已保存所有未提交的工作副本以防丢失重要变更。 - 当遇到复杂场景比如频繁变动或者多人协作环境下的情况时考虑采用 rebase 替代简单的 merge 操作以保持历史记录更加清晰整洁[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值