我需要帮助解决一个非常恼人的问题。我是开发团队的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
我有几个贡献者回购的本地副本,以及我经常切换的来源。通过贡献者回购,我从不进行代码更改,我只需查看代码并编译&测试应用程序。
然而,我注意到有时,当我结帐其中一个贡献者分支时,git会告诉我Your branch is a head of remotes/this_fork/this_branch by ## commits. (use "git push" to publish your local commits)
或Your branch and 'remotes/this_fork/this_branch' have diverged, and have ## and ## different commits each, respectively. (use "git pull" to merge the remote branch into yours)
。因为我知道我没有做任何更改,所以我尝试通过运行git pull
来进行攻击,但这会导致git在前一种情况下迫使我进入git commit
,并导致git执行合并后者。正在运行git status
会显示相同类型的消息,但未显示已修改的文件。
一旦我的本地副本的分叉回购陷入这种情况,我发现解决它的唯一方法是完全删除回购的本地副本 - 但这并不总是有帮助。我在一个分支上观察到,在我完全删除它之后它仍处于相同的情况,然后重新添加遥控器(事实上,我删除了整个导演& .git目录,其中全部本地回购副本)。正在运行git reset --hard
并没有帮助。
这在Ubuntu和Windows上都有发生(应用程序是跨平台的)。请注意,每次远程,每个分支或每次签出分支时都不会发生这种情况。我会在几个星期没有问题,然后突然有一天当我检查出来时,就会发生这种情况。
请注意,这与作者实际制作的this不同。推动变革。就我而言,我没有做任何改变。
所以我想我的问题是双重的:"为什么当我没有时,git会认为我做了改变?"和"我该如何解决这个问题?"
答案 0 :(得分:3)
请改为git checkout -B this_fork/this_branch remotes/this_fork/this_branch
如git checkout
man page中所述:
如果给出
的交易等价物-B
,则创建它(如果它不存在);否则,它被重置。这是
$ git branch -f <branch> [<start point>]
$ git checkout <branch>
这样,您确定本地分支this_fork/this_branch
始终重置为您提取的分叉分支remotes/this_fork/this_branch
。
在这种情况下,不应该提前或落后。