反向将提交应用于工作副本

ber*_*kes 31 git revert

为了研究前一次提交所引入的效果,我想将其反向应用到我的工作副本并使用代码.

我通过创建和应用补丁的工作流程进行了管理,但是想知道这是否可以更轻松地完成.

git checkout -b "tmp-fiddle"
git diff -R -p d9fd2bb^ d9fd2bb > patch_to_examine.patch
# Manually edit the patch a little
git apply patch_to_examine.patch
Run Code Online (Sandbox Code Playgroud)

请注意,我没有查看git revertgit rebase -i因为这些会引入新的提交或更改历史记录:我只是希望引入的更改d9fd2bb不适用于我当前的工作副本.

Gar*_*eth 48

怎么样git revert -n

-n
--no-commit
Run Code Online (Sandbox Code Playgroud)

通常,该命令会自动创建一些提交日志消息,提交哪些提交已被还原.此标志应用将命名提交还原到工作树和索引所需的更改,但不进行提交.此外,使用此选项时,索引不必与HEAD提交匹配.恢复是针对索引的开始状态完成的.

在将多个提交效果还原到行中的索引时,这非常有用.

  • 不幸的是,只有当你的工作副本没有修改受提交影响的任何文件时,它才有效(尽管它可以在其他文件中进行更改).我猜,在这种情况下你需要`git stash; git revert -n <commit>; git stash pop`并解决冲突(如果有的话). (4认同)

dos*_*ter 14

另一种有效的方法是git show | git apply -R. -R代表反向差异。

这适用于任何差异,所以你可以做 git diff ... | git apply -R

或反转藏匿处 git stash show -p stash@{0} | git apply -R