gpt4 book ai didi

git - 如何在 git 上恢复旧提交中的特定文件

转载 作者:太空狗 更新时间:2023-10-29 13:30:00 24 4
gpt4 key购买 nike

我想我的问题接近这个 one ,但我正在使用 git。

假设我有

Commit1 更改了 file1.cfile2.c

Commit2 更改了 file2.cfile3.cfile4.c

Commit3 更改了 file1.cfile2.cfile3.c

等等……

然后,我只想恢复 Commit2file2.c 中所做的更改,但尽量保留 Commit3 中的更改> 在这个文件中制作...

你怎么看?有什么办法吗?

谢谢。

最佳答案

一般来说,要取消整个 提交,您可以使用git revert。 (您可能已经知道)。您的问题是您只想取消旧提交中的一些 更改。但事实证明这很容易,因为:

  • git revert与反向应用补丁(git showgit diff 根据需要使用特定的提交 ID,然后是 git apply -R 生成的补丁)然后提交具有相同的效果;和
  • git diff允许您选择对哪些文件进行差异化处理。

因此,对于常规(单亲)提交,您可以简单地:

git show <commit-id> -- <path>

<commit-id> 得到“有趣”的变化,然后通过管道(或以其他方式将结果提供)到 git apply -R :

git show HEAD~3 -- <path> | git apply -R

或者在这种情况下:

git show commit2 -- file2.c | git apply -R

对于 merge 提交,git show将产生一个组合差异,这不是你想要的,所以你应该使用 git diff (或 git diff-tree )具有两个特定的提交 ID。请注意,您可以在反向应用之前(或之后)检查差异,因为 git apply不会自己进行新的提交(所以你必须自己做)。

关于git - 如何在 git 上恢复旧提交中的特定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27388076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com