git - 如何复制其他分支中的更改并恢复原始分支
问题描述
我有这个问题,我正在为我的代码开发一个新功能,但我不小心在 dev 分支中编写了我的代码并提交了我的更改(我不得不创建一个新分支)。
我需要将这些更改放入 feature_branch 并将 dev 恢复到以前的提交。
我正在考虑从 dev 创建一个分支,然后恢复 dev,但我做得不好。
解决方案
几个重要的点:
- git 中的提交是不可变的
- 提交指向零个或多个“父母”,并且总是通过向后跟踪来检查历史
- 分支只是指向特定提交的指针,并且可以从那里到达其他提交
- 可以自由移动分支以指向您想要的任何提交
所以,你的历史看起来像这样(向后的箭头代表每次提交中记录的“父母”):
A <--B <--C <--D
^
|
(develop)
你希望它看起来像这样:
A <--B <--C <--D
^ ^
| |
(develop) (feature_branch)
因此,首先,检查您更改后的开发,运行git branch feature_branch
,给出:
A <--B <--C <--D
^
|
(develop, feature_branch)
然后使用 找到提交 C 的实际提交哈希(develop 应该指向的位置)git log
,并使用git reset --hard the_commit_hash_you_found
将 develop 指向该提交。(重要提示:这将清除所有未提交的更改。git stash
在开始之前提交或使用它们!)
A <--B <--C <--D
^ ^
| |
(develop) (feature_branch)
重要说明:如果您已将更改的开发版本推送到共享服务器,或者其他任何人都基于它,还有更多工作要做。但是,如果您只是在本地完成此操作并且没有推送到任何地方,那么以上就是您所需要的。
推荐阅读
- c# - .Net Core 2 主题
- linux - 从 Chromium 执行 shell(脚本)?
- python - 如何在不使用暴力和/或计算时间过长的情况下解决这个问题?
- typescript - 如何配置 Typescript、Karma、Webpack 在浏览器中运行测试
- raku - Nativecall Buf 生命周期和垃圾收集器
- jquery - AJAX POST Servlet 调用
- android - 如何修复 java.lang.SecurityException 警告?
- android - Android TalkBack 反复说“服务 [我的应用名称]”
- javascript - 如何将数据传递到引导模式 django
- react-native - 未声明的基于商店的 React Navigation 导致警告