GIT 认为我已经做了更改,但我没有

标签 git github version-control

我需要帮助解决一个非常恼人的问题。我在 a github repo 的开发团队中,这部分意味着我经常审查来自他们自己的分支分支的贡献者的功能更新。为此,我使用以下代码提取其存储库的本地副本并检查特定分支:

git remote add this_fork this_fork_url
git checkout -b this_fork/this_branch
git branch --set-upstream-to=remotes/this_fork/this_branch this_fork/this_branch
git pull

我有几个贡献者存储库的本地副本,以及来源,我经常在其中切换。对于贡献者存储库,我从不更改代码,我只是检查代码并编译和测试应用程序。

然而,我注意到有时,当我 checkout 这些贡献者分支之一时,git 会告诉我 Your branch is a head of remotes/this_fork/this_branch by ## commits。 (使用“git push”来发布你的本地提交),或者你的分支和'remotes/this_fork/this_branch'已经 fork ,分别有##和##不同的提交。 (使用“git pull”将远程分支 merge 到您的分支中)。因为我知道我没有做任何更改,所以我尝试通过运行 git pull 来坚持下去,但是在前一种情况下,这会导致 git 强制我进入 git commit,并导致 git 在后者中执行 merge 。运行 git status 会显示相同类型的消息,但未显示修改过的文件

一旦我的 fork 存储库的本地副本之一出现这种情况,我发现修复它的唯一方法是完全删除存储库的本地副本 - 但这并不总是有帮助。我在一个分支上观察到,在我完全删除它之后它仍然处于相同的情况,然后重新添加远程(事实上,我删除了整个 director 和 .git 目录,all 本地 repo 副本)。运行 git reset --hard 没有帮助。

这在 Ubuntu 和 Windows 上都会发生(应用程序是跨平台的)。请注意,这不会发生在每个远程、每个分支或每次我 checkout 分支时。我在一个分支上几周都没有问题,然后突然有一天,当我检查它时,这种情况发生了。

请注意,这与 this 不同,其中作者实际上进行了更改并推送了更改。就我而言,我没有做任何更改

所以我想我的问题有两个方面:“为什么 git 会认为我已经做了更改,而我没有?”和“我该如何解决这个问题?”

最佳答案

试试 git checkout -B this_fork/this_branch remotes/this_fork/this_branch
git checkout man page 中所述:

If -B is given, is created if it doesn’t exist; otherwise, it is reset. This is the transactional equivalent of

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

这样,您可以确定您的本地分支 this_fork/this_branch 总是 重置为您拥有的 fork 分支 remotes/this_fork/this_branch获取。
在这种情况下,前后不应该有任何提交。

关于GIT 认为我已经做了更改,但我没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41413921/

相关文章:

git - LF 将在 git 中被 CRLF 替换 - 文件将具有其原始行结尾

git - 为什么文件从已经上演的不同分支 check out ?

git - 更新 github 存储库以匹配本地

svn - 什么时候从 HEAD 创建一个新的存储库是正确的?

open-source - 您将如何将多站点 ClearCase/ClearQuest 环境迁移到所有开源环境?

svn - 为什么 `git remote` 没有在我的 git-svn 存储库中列出任何内容?

git - 在 git-clone 期间使用主动模式 FTP 而不是被动模式?

github - 法律允许将 Codeplex 项目 fork 到 Github 帐户吗?

github - 如何在 GitHub 上添加 SonarCloud 徽章?

svn - 使用 Tortoise SVN 查看前几天所有更改的最简单方法是什么?