如何在 GitHub 桌面的提交中恢复特定文件

How To Revert A Specific File in the Commit at GitHub Desktop

我将 X 提交推送到我的功能分支。

当我通过 Github 桌面查看历史记录时,我意识到这次提交中不需要一个文件:历史记录如下所示:

X commit
A file changed-- ok
B file changed-- ok
C file changed-- not ok for me.. I had changed this by mistake.

有什么方法可以在不还原提交的情况下返回到这个原始文件(我提交之前的状态)?

我唯一的办法就是从origin-develop中找到文件,然后复制粘贴我的功能分支,然后为此进行新的提交。

Is there any way to go back to this original file (the state before my commit) without reverting the commit?

当然可以。此提交之前的文件状态位于上一次提交中。 (所有提交都是所有文件的快照。)

然而,你不能做的是改变你所做的承诺。提交是不可变的;否则 Git 将毫无用处。

My only way is to find the file from the origin-develop and copy and paste my feature branch and make a new commit for this.

是的,还有……?那就这样吧。

如果你反对的是在你希望有一个的地方有两个提交,那么在进行第二次提交后将它们压缩在一起;交互式变基是一种简单的方法,尽管在这种情况下我个人会使用软重置,如我的 What's the difference between git reset --mixed, --soft, and --hard? 中所述(这是遗憾类型 1)。但是,如果您已经将此分支与先前的提交一起推送到共享位置(例如拉取请求),则不要执行此操作。你不应该重写 public 历史。


例子。我们从这种情况开始(这是一个日志,所以提交 运行 从最新到最旧):

* 78f90c1 edited all three files
* 5ec87ed created three files

我们编辑了三个文件;称他们为 aaa.txt、bbb.txt 和 ccc.txt。我们对 ccc.txt 的编辑感到遗憾,并希望将其恢复到 5ec87ed 中的状态。

git restore -s @~1 -- ccc.txt
git add .
git commit -m 'restored ccc.txt'

完成。我们现在有这个:

* 75c192b (HEAD -> what) restored the third file
* 78f90c1 edited all three files
* 5ec87ed created three files

但是如果我们希望只有一个提交,而现在我们有两个(请记住,如果您已经推送了前两个提交,请不要​​这样做):

% git reset --soft @~2
% git commit -m 'edited just two files'

结果:

* e0a324a (HEAD -> what) edited just two files
* 5ec87ed created three files