极简idea下git操作(二)- 合并分支,版本回退,Cherry-Pick

这篇讲些git的高级应用,如分支操作,版本回退,bug修复流程等

新建分支

一般开发中,我们不会直接改master分支,而是基于master分支建一个dev分支,我们可以通过点击下图按钮来基于master建新分支,需要注意的是master不能是本地当前分支,不然不会出菜单,并且代码要是最新的,不然新分支的代码也是老的

 合并分支

等我们开发完功能,需要合并分支到master上了,我们先切换分支到master

在选中dev,点击Merge into Current,就能把dev分支合并到master分支上了

删除分支 

删除分支很简单,选中要删除的分支点击Delete就行了,需要注意的是只能删除非当前分支,下图只是删了本地分支,要删远程分支是点击Remote Branches下面的分支再delete

 版本回退

有时候我们提交错了代码,需要回退代码,该怎么操作呢?

点击下面的Version Control-Log菜单可以看到提交的记录

 点击要回退的版本,比如我要回退到版本1,右击然后选择Reset Current Branch to Here,就能回退版本了,回退的时候会让你选Mixed或者Hard,Mixed的意思是版本回退了,但是本地的文件不会回退,Hard的意思是本地文件和版本都回退,这时如果你的版本2已经提交到远程仓库,push的时候就会有冲突,只能使用强制提交,强制提交的意思是本地仓库覆盖远程仓库

git push -f origin dev

 

soft,mixed,hard等的区别可以看这篇文章:idea Reset Current Branch to Here Soft、Mixed、Hard、keep区别(简单易懂)_soft mixed hard keep-优快云博客 

undo commit, revert commit

最近的一次commit可以使用undo操作,执行完这个提交会取消,文件回到未提交的状态,这次提交的修改还在

 

revert commit是取消这次commit,这次提交的修改会回退,并且多一个提交记录,如果发生冲突,需要手动解决冲突 

 修复线上bug流程

当你开发完项目,成功上线后,就要开始下个阶段的开发了,这时线上突然来bug了,你当前分支刚开发了一半,又不能提交,该怎么处理呢?

1.stash当前的工作,会把你当前分支上的改动保存到一个临时空间中

 2.基于master新建一个bugfix分支用来修复线上bug

3.提交该分支,并合并到master分支上

新建分支,合并分支上面都讲了,这里就不重复了,接下来重点来了,master上的bug,dev分支上也会存在,如何把这次提交也合并到dev分支上呢?

我们切换到dev分支,在git的log里面找到修复bug的提交,选中cherry-pick就能把这次提交合并到dev上面去,当然也支持多选合并

 合并完成后选择unStash Changes就能恢复之前开发一半的代码了,恢复可能会有冲突,至于怎么解决上面都有说明,就不展开了

### 如何在 IntelliJ IDEA 中取消或撤销已执行的 Cherry Pick 操作 在开发过程中,有时可能会误操作或者需要回退某些变更。对于已经完成的 Cherry Pick 操作,在 IntelliJ IDEA 中可以通过以下方法来取消或撤销。 #### 方法一:通过 Revert 取消 Cherry Picked 的 Commit 如果 Cherry Pick 已经成功应用到目标分支上,则可以使用 **Revert** 功能创建一个新的提交,该提交会逆转由 Cherry Pick 引入的更改。 1. 打开版本控制工具窗口(`Version Control` 或快捷键 `Alt+9`)。 2. 在 `Log` 面板中找到对应的 Cherry Picked 提交记录。 3. 右击此提交记录,选择 `Revert`。 4. 这将生成一个新的提交,用于撤消原提交引入的修改[^4]。 需要注意的是,这种方法不会真正删除原来的提交历史,而是通过新的提交抵消其影响。 #### 方法:通过 Reset 软重置到之前的提交状态 当希望完全移除最近一次 Cherry Pick 导致的变化时,可以选择软重置(Soft Reset)。这种方式适用于尚未推送至远程仓库的情况。 1. 切换到目标分支(即进行了 Cherry Pick分支),例如 `feature_v1.0_new`。 2. 打开 Git Log (`Ctrl+Shift+F7`) 查找当前 HEAD 前的一个提交哈希值(假设为 `<previous-commit-hash>`)。 3. 使用命令行终端输入如下指令: ```bash git reset --soft <previous-commit-hash> ``` 4. 如果不想保留工作区中的改动,也可以改为硬重置(Hard Reset): ```bash git reset --hard <previous-commit-hash> ``` 注意:硬重置将会丢失未保存的工作成果,请谨慎操作。 #### 方法三:借助 IntelliJ IDEA GUI 实现交互式的 Reset 除了手动运行上述命令外,还可以利用 IntelliJ IDEA 图形界面化流程: 1. 展示项目的历史记录视图(可通过导航栏上的 VCS -> Show History 访问)。 2. 定位到期望恢复的状态节点处右键单击它。 3. 选取 “Reset Current Branch to Here...”,随后弹框询问具体模式——推荐选用 Soft Mode 来保护暂存区域的数据完整性[^2]。 --- ```python # 示例 Python 函数展示逻辑过程模拟 def undo_cherry_pick(branch_name, commit_hash=None): import subprocess if not branch_name: raise ValueError("Branch name is required.") try: # Switch back to target branch before resetting. subprocess.run(["git", "checkout", branch_name], check=True) if commit_hash: action = input(f"Do you want a soft or hard reset? [soft/hard]") if action.lower() == 'soft': command = ["git", "reset", "--soft", commit_hash] elif action.lower() == 'hard': confirm = input("Are you sure about performing HARD RESET?(y/n)") if confirm.lower().startswith('y'): command = ["git", "reset", "--hard", commit_hash] else: print("Operation canceled by user.") return None result = subprocess.run(command, capture_output=True, text=True) else: revert_commit_id = get_latest_commit_id() process_revert(revert_commit_id) return {"status": "success", "message": f"Undo completed on {branch_name}"} except Exception as e: return {"error": str(e)} ``` --- #### 总结 以上介绍了三种不同的方式用以应对不同场景下的需求。无论是采用图形化用户接口还是脚本自动化处理均能有效达成目的。然而无论采取何种手段都应事先确认清楚现有环境状况以免造成不可逆损失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值