Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git重置为现有提交散列后正确地放回代码?_Git - Fatal编程技术网

如何在git重置为现有提交散列后正确地放回代码?

如何在git重置为现有提交散列后正确地放回代码?,git,Git,情景: my commit = 123423423423423423423423 person A's commit = asdfasdfadsfasdfasdfasdf person B's commit = 23423423423423423423443 现在我的commit还不能推送到prod,所以我使用persona的commit硬重置 git reset --hard asdfasdfadsfasdfasdfasdf git push -f origin master 然后在重置

情景:

my commit = 123423423423423423423423
person A's commit = asdfasdfadsfasdfasdfasdf
person B's commit = 23423423423423423423443
现在我的commit还不能推送到prod,所以我使用persona的commit硬重置

git reset --hard asdfasdfadsfasdfasdfasdf

git push -f origin master

然后在重置之后,我注意到来自此提交的代码
123423423423
仍在我的文件中。现在的问题是,如果它们在硬重置之前被提交和推送,因此显示为未修改,那么如何添加它们并重新提交和推送它们。

看起来您的强制推送被服务器拒绝,然后当您再次拉下主分支时,您的本地分支已更新到远程分支,原始提交已恢复

git reset--hard
也许是git工具箱中最锋利的工具,是唯一可以永久删除代码的非管道命令之一。大致翻译为“将我的分支移动到,删除我所有的本地修改,重置我的索引,并在处签出该版本的代码。”任何未提交的代码都将在此处永久丢失

git push-f
是一个非常接近的第二名,更有趣的是,它是最有可能让团队其他成员崩溃的第二名。粗略地说,这句话是“我不在乎其他人是否将更改推送到服务器,我希望我的更改出现在那里,所以删除他们的更改以实现它。”这是非常危险的,以至于大多数git服务器默认禁用此功能,或者至少需要管理员级别的权限来完成它。在某些情况下,这样做是可取的,但这需要非常谨慎,并充分理解其后果


如果您的代码已经被推送到远程,并且您想将其删除,那么使用git将更改作为新的提交进行逆转,并将其推送到服务器几乎总是更好的选择。将您带到同一个位置,几乎没有那么多风险。

我认为您可以先签出A的提交,然后将其推送到主控,添加更改并再次推送。正如我所说,即使在执行硬重置后,我的代码仍在本地,因此如果我执行git状态,文件未显示为已修改,因为它们以前已提交。。那么我该怎么办呢?我不要求你重置,而是签出到提交服务器,你是说签出我在硬重置中使用的特定哈希,但是我已经在硬重设时使用了上述散列是的,这将允许您直接进行该提交,但是我仍然建议首先进行研究,因为我可能会弄错