git - 我如何拆分埋藏在历史中的 Git 提交?

标签 git split commit revision-history

我搞砸了我的历史,想对其进行一些更改。问题是,我有一个包含两个不相关更改的提交,并且这个提交被我本地(非推送)历史记录中的一些其他更改所包围。

我想在推出之前拆分此提交,但我看到的大多数指南都与拆分您最近的提交或未提交的本地更改有关。是否可以对已埋没在历史中的提交执行此操作,而不必从那时起“重做”我的提交?

最佳答案

有一个拆分提交的指南 in the rebase manpage 。快速总结是:

  • 执行包含目标提交(例如 git rebase -i <commit-to-split>^ branch)的交互式 rebase 并将其标记为要编辑。

  • 当 rebase 到达那个提交时,使用 git reset HEAD^ 重置到提交之前,但保持您的工作树完好无损。

  • 逐步添加更改并提交它们,根据需要进行尽可能多的提交。 add -p 可用于仅添加给定文件中的部分更改。如果您想为某个提交重新使用原始提交消息,请使用 commit -c ORIG_HEAD

  • 如果你想测试你提交的内容(好主意!)使用 git stash stash 你没有提交的部分(或者在你提交之前使用 stash --keep-index),测试,然后 git stash pop 返回休息到工作树。继续提交,直到您提交所有修改,即拥有一个干净的工作树。

  • 运行 git rebase --continue 以在现在拆分的提交之后继续应用提交。

关于git - 我如何拆分埋藏在历史中的 Git 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4307095/

相关文章:

database - 为什么在 DDL 命令之前和之后执行的 DML 命令会自动提交?

svn - Subversion 中原子提交的值(value)是什么?

commit - 我应该压缩小,开发 promise 到更大的吗?

git - 设置对 git repo 的只读 http 访问

javascript - 克隆后选择元素不起作用

java - 在找到的模式之间拆分字符串

Python - 使用正则表达式将数字和字母拆分为子字符串

java - 如何读入和拆分由空格和正斜杠分隔的数字字符串

git - 将 Git Slave 与 Jenkins 集成

javascript - Js with git handle control version with the new module system client side