【发布时间】:2016-12-11 02:50:45
【问题描述】:
我的机器上有一个目录,用于存储来自 GitHub 的所有项目。我打开了其中一个并在我的机器上进行了本地更改。项目搞砸了,现在我想放弃我所做的所有更改并从存储库中提取最新版本。我对 GitHub 比较陌生,使用 Git Shell。
git pull 命令是否足够?
我是否需要做任何额外的事情来丢弃本地所做的更改?
有人可以帮忙吗?
【问题讨论】:
我的机器上有一个目录,用于存储来自 GitHub 的所有项目。我打开了其中一个并在我的机器上进行了本地更改。项目搞砸了,现在我想放弃我所做的所有更改并从存储库中提取最新版本。我对 GitHub 比较陌生,使用 Git Shell。
git pull 命令是否足够?
我是否需要做任何额外的事情来丢弃本地所做的更改?
有人可以帮忙吗?
【问题讨论】:
只是添加其他人所说的我会做以下事情。 如果您已经进行了更改,这意味着您已经在某个时候执行了“git add”, 我会这样做:
git reset HEAD <file_name>
如果您没有像之前提到的那样声明要更改的文件:
git checkout .
【讨论】:
git reset 是您想要的,但我将添加一些其他答案未提及的额外内容,您可能会觉得有用。
git reset --hard HEAD 将您的更改重置回本地存储库跟踪的最后一次提交。如果您进行了提交,但没有将其推送到 GitHub,并且也想将其丢弃,请参阅 @absiddiqueLive 的回答。
git clean -df 将丢弃您可能添加的任何新文件或目录,以防您想丢弃它们。如果您没有添加任何内容,则不必运行它。
git pull(或者如果你在 GitHub 客户端上使用 git shell)git sync 将从 GitHub 获取新的更改。
将来修改:
前一周我更新了我的 git shell,并注意到git sync 命令不再默认定义。作为记录,在 bash 中输入 git sync 等同于 git pull && git push。我发现它仍然有用,所以它在我的 bashrc 中。
【讨论】:
git status,则应该指出这一点。看看这个问题:stackoverflow.com/questions/36039687/…
git clean -fd。
除了上面的答案,总有焦土之法。
rm -R <folder>
在 Windows shell 中,命令是:
rd /s <folder>
然后您可以再次签出该项目:
git clone -v <repository URL>
这肯定会删除任何本地更改并从远程存储库中提取最新的。小心 rm -R 因为如果你输入错误的路径,它会删除你的好数据。例如,绝对不这样做:
rm -R /
edit:修正拼写并添加重点。
【讨论】:
推翻旧的回购。
git push -u origin master --force
我认为--force 也适用于拉动。
【讨论】:
git pull 是git fetch 后跟git merge FETCH_HEAD 的简写。 fetch 有一个 --force 选项,但它与覆盖当前分支中的更改没有任何关系。因此,虽然从技术上讲 git pull --force 是合法的,但它并没有像您认为的那样做。
运行以下命令
git log
从这里你会得到你的最后一个推送提交哈希键
git reset --hard <your commit hash key>
【讨论】:
如果您已经提交了更改,则必须提交给revert changes。
如果您还没有提交,只需进行干净的结帐git checkout .
【讨论】: