首页 > 解决方案 > 如何复制其他分支中的更改并恢复原始分支

问题描述

我有这个问题,我正在为我的代码开发一个新功能,但我不小心在 dev 分支中编写了我的代码并提交了我的更改(我不得不创建一个新分支)。

我需要将这些更改放入 feature_branch 并将 dev 恢复到以前的提交。

我正在考虑从 dev 创建一个分支,然后恢复 dev,但我做得不好。

标签: git

解决方案


几个重要的点:

  • 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)

重要说明:如果您已将更改的开发版本推送到共享服务器,或者其他任何人都基于它,还有更多工作要做。但是,如果您只是在本地完成此操作并且没有推送到任何地方,那么以上就是您所需要的。


推荐阅读