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

路跑者

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

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

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 中找到该文件并复制并粘贴我的功能分支并为此进行新的提交。

马特

有没有办法在不恢复提交的情况下回到这个原始文件(我提交之前的状态)?

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

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

我唯一的方法是从 origin-develop 中找到该文件并复制并粘贴我的功能分支并为此进行新的提交。

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

如果你反对的是你有两个提交,而你希望有一个,那么在进行第二个提交后将它们压缩在一起;交互式变基是一种简单的方法,尽管在这种情况下我个人会使用软重置,正如我在 git reset --mixed、--soft 和 --hard 之间有什么区别中解释的那样?(这是遗憾类型 1)。但是,如果您已经将该分支与之前的提交一起推送到共享位置(例如拉取请求),请不要这样做。你不应该重写公共历史。


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

* 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章