- Published on
Git提交被撤销, 再次提交新变动无法应用 | git - merge - revert - merge | git format-patch
- Authors
- Name
- Shelton Ma
问题现象(What Happened)
master
合并了一个分支(比如feature
),提交进来了- 后来使用
git revert
把那次合并的内容“撤销”了 - 再后来想再次引入
feature
的代码,再次merge
或者cherry-pick
重新挑选提交,结果Git
显示cherry-pick
成功,但没有任何变动
问题原因(Why It Happened)
Git
会认为这个提交 已经应用过,即使后来被revert
revert
并不会**“删除”**原始提交,而是追加一个反向操作
解决方案(How to Fix It)
(推荐)如果
feature
没有添加新的提交, 使用revert
可追踪所有变更, 原始提交信息完整git revert <revert-commit-sha>
如果有新的提交, 先撤销已撤销的提交, 再提交新的合并
format-patch + apply
精准还原控制git format-patch -1 <commit-sha> git apply 0001-xxx.patch git commit -am "Re-apply feature with patch"
(不推荐)
git checkout feature -- .
临时用, 会创建新的commit, 没有保留历史checkout --
会将feature
分支的所有文件(也可修改.
来指定特定文件)复制到当前分支- 相当于在当前分支产生新的提交