如何在 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
我将 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