ChatGPT解决这个技术问题 Extra ChatGPT

Git 结帐 - 切换回 HEAD

我一直在做我的项目,而在某个时候我发现一件事停止了工作。当我的代码正常工作时,我需要查看它的状态,所以我决定使用 git checkout (因为我想检查一些东西)。所以我已经完成了

git checkout SHA

几次回到我无法转到 HEAD 的点时,输出如下:

git checkout SHA-HEAD

error: Your local changes to the following files would be overwritten by checkout:
    [list of files]
Please, commit your changes or stash them before you can switch branches.
Aborting

我很确定我没有改变任何东西。命令

git checkout master

给出相同的输出。

有没有办法回到 HEAD?

“跳过”历史提交的安全方式是什么?

如果您不想保留这些更改,git clean -f 将清除所有未跟踪的文件。然后结帐给大师
error: ... 消息表示您(或您所做的某事,可能是间接地)确实 更改了文件。您可以告诉 Git 放弃或覆盖这些更改,或使用 git status 和/或 git diff 来查看确切的更改内容。它可以像某种行尾修改一样简单,或者在后台运行的某个命令写入文件。 (旁白:“回到 HEAD”在 Git 中没有意义,因为您 总是 在 HEAD:HEAD 字面意思是“当前提交”。您可以更改 HEAD,之后你仍然在 HEAD,只是一个不同的 HEAD。这......很难说。:-))
Git 加载了机制,所以这里有两个: git reset --hard HEAD 表示“重置索引和工作树以匹配 HEAD”,即丢弃更改。或者:git checkout -f master 表示“将 HEAD 更改为 master,即使这意味着放弃一些工作”:-f 表示“强制”。

S
Sajib Khan

您可以stash(将更改保存在临时框中)然后返回 master 分支 HEAD。

$ git add .
$ git stash
$ git checkout master

来回跳过提交:

转到特定的 commit-sha。 $ git checkout

如果您在此处有未提交的更改,则可以结帐到新分支 |添加 |提交 |将当前分支推送到远程。 # 签出一个新分支,添加,提交,推送 $ git checkout -b $ git add . $ git commit -m 'Commit message' $ git push origin HEAD # 将当前分支推送到远程 $ git checkout master # 现在返回 master 分支

如果您在特定提交中有更改并且不想保留更改,则可以执行 stash 或 reset 然后检出到 master(或任何其他分支)。 # stash $ git add -A $ git stash $ git checkout master # reset $ git reset --hard HEAD $ git checkout master

如果您没有未提交的更改,则在检查特定提交后,只需返回主分支或其他分支。 $ git status # 查看变化 $ git checkout master # 或者,快捷方式 $ git checkout - # 回到之前的状态


这解决了我的问题 - 部分。我仍然需要知道如何来回跳过提交而不会产生任何后果。
@rbraun,我已经编辑了我的答案,展示了如何来回跳过提交。
唷。我想知道为什么我可以看到我在主分支中所做的更改。这是因为我没有将 addcommitpush 分支到 origin。你的解决方案奏效了。
节省时间,为什么 Git 不将自己创建为更像人类的东西,我看到有很多关于它的问题,它只是一个版本控制软件=.=!
使用 git 2.17.1,git checkout master => “错误:pathspec 'master' 与 git 已知的任何文件都不匹配”但 git checkout - 很好。