我应该怎么做才能从上次推送的提交中获取源代码?

What should I do to get source code from the last pushed commit?

在我开始与其他贡献者合作之前,我认为我了解 git 的简单功能:)

情况如下:

  1. 我从存储库中提取了源代码(来自提交:2c49868)。
  2. 我更改了一些代码,发现更改后的应用程序无法正常工作。我没有使用 git commit 也没有使用 git push.
  3. 我想恢复更改前的源代码(来自提交:2c49868)。

我应该怎么做才能不破坏回购协议?

我要做:

git fetch --all
git reset --hard origin/master

这是正确的还是更好的方法?


编辑:

结果是:

  1. 我昨天在工作的服务计算机上推送了新提交的源代码:(c6a7e5f)。
  2. 我在本地更改了一些代码(我没有使用git commit也没有使用git push
  3. 我回家了
  4. 我在另一台个人电脑上提取了源代码(来自提交:c6a7e5f)。
  5. 我更改了源代码和 added/deleted 家里的一些文件,使用了 git commit(提交:2c49868)和 git push.
  6. 今天,我回来工作(维修电脑)。在我的 IDE 中,我看到了第二点的变化,我想获得第五点的源代码(提交:2c49868)。

结论:我不想在服务计算机上进行本地更改(从第二点开始),因为它们还在这里,但我想要最新的服务计算机上此存储库的源代码。

恳请各位谅解

我认为你应该恢复更改。然后你会来到最后一次提交。我认为你做得对,但是 fetch 是不必要的。

如果您想包含文件夹,请查看 this post, or this one

我还会在还原之前将我的更改复制到本地文本编辑器中。如果您使用的是 Intellij IDEA,我建议您 搁置 您的更改。这意味着您的本地更改将被保存,您将进入最后一次推送的提交。 Jetbrains documentation.

中详细描述了搁置和取消搁置

如果您没有提交,您可以做一些事情

git stash 

这将隐藏您的更改并将您带回正确的来源 - 您稍后可能需要它们。

git reset --hard

这将消除工作树中的差异(您无法恢复更改)

如果你想清除任何未跟踪的文件 git reset 是不够的,你必须使用

git clean -f

这将从被跟踪的根目录中删除所有不在 Git 跟踪下的文件。

如果您是最新的,则无需事先获取。

如果你确实提交了它(我假设你在 1 次提交中完成了)你可以做

git reset --hard HEAD^

这将重置最后一次提交并将其完全删除(请谨慎使用 hard,如果您担心,请使用 soft,然后在您检查了已重新检出的内容后恢复。)