如何丢弃本地更改并从GitHub存储库获取最新信息


74

我的机器上有一个目录,用于存储来自GitHub的所有项目。我打开了其中一个,并在计算机上本地进行了更改。项目搞砸了,现在我想放弃所做的所有更改,并从存储库中获取最新版本。我对使用Git Shell的GitHub比较陌生。

git pull命令是否足够呢?我是否需要做其他任何事情以放弃本地所做的更改?有人可以帮忙吗?

Answers:


96

git reset是您想要的,但是我要添加一些其他可能没有发现的有用的东西。

git reset --hard HEAD将您的更改重置为本地存储库已跟踪的最后一次提交。如果您进行了提交,则没有将其推送到GitHub,也想将其丢弃,请参阅@absiddiqueLive的答案。

git clean -df如果您要丢弃这些文件或目录,它将丢弃您可能添加的任何新文件或目录。如果尚未添加任何内容,则无需运行此程序。

git pull(或者如果您在GitHub Client上使用git shell)git sync将从GitHub获得新的更改。

以后进行编辑: 我在前一周更新了git shell,并注意到git sync默认情况下不再定义该命令。记录下来,键入git sync等同git pull && git push于bash。我发现它仍然有帮助,因此它在我的bashrc中。


这些对我都不起作用,我得到:请在合并之前移动或移除它们
Stepan Yakovenko 18/12/7

@StepanYakovenko听起来好像您的存储库在尝试合并的中间,如果您键入,则应该指出git status。看看这个问题:stackoverflow.com/questions/36039687/…–
Cody

您还需要确定git clean -fd是否还有目录被吹走。
乔希亚·约德

27

运行以下命令

git log

由此您将获得最后的推送提交哈希密钥

git reset --hard <your commit hash key>

12

如果您已经提交更改,则必须还原更改

如果您尚未提交,只需进行一次干净的结帐 git checkout .


7
小心还原。通常最好只重置一下。还原创建一个新的提交,该提交将删除或添加回先前提交中的内容。但是,这些删除和“添加回”会在以后尝试与另一个分支合并时引起问题,因为它们被视为更改。例如,如果你不小心使分支A中的变化,然后回复的变化使支路B同样的变化,推动分支B,接着分支A,支路A最终可能会删除你的分支B.所做的更改
加多宝仍然记得莫妮卡

@JDB啊,是的,谢谢-我在极少数情况下会使用自己重设,写答案时只是将它与还原混为一谈
General_Twyckenham

4

除了上述答案外,总有焦土法。

rm -R <folder>

在Windows Shell中,命令为:

rd /s <folder>

然后,您可以再次检出项目:

git clone -v <repository URL> 

这肯定会删除所有本地更改,并从远程存储库中获取最新信息。小心rm -R,因为如果输入错误的路径,它将删除您的正常数据。例如,绝对不要:

rm -R /

编辑:修复拼写并增加重点。


-7

推翻旧仓库。 git push -u origin master --force

我认为该--force方法同样适用。


2
这与OP想要做的完全相反。
JDB仍记得Monica

“我认为--force也同样适用于拉力” ...那行不通吗?
罗尼·罗斯顿

git pull是的缩写,git fetch后跟git merge FETCH_HEADfetch有一个--force选项,但实际上与覆盖当前分支中的更改没有任何关系。因此,尽管从技术上讲git pull --force是合法的,但它并没有按照您的想法做。
JDB仍然记得莫妮卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.